Глава 5. Объекты конфигурации
В этой главе рассказывается о работе с конфигурацией в целом и о тех режимах и механизмах, которые используются для всех объектов конфигурации.
Описание действий по созданию и настройке основных объектов конфигурации (константы, справочники, документы, последовательности, журналы, перечисления, отчеты, обработки, регистры), а также некоторых объектов, располагающихся в ветви конфигурации Общие (критерии отбора, стили), производится в документации на примере использования окна редактирования объекта (подробнее см. здесь). Аналогичные действия можно выполнять и в палитре свойств объектов.
5.1. Свойства конфигурации
Конфигурация в целом имеет свои свойства, которые можно редактировать. Палитра свойств открывается для корневой ветки дерева конфигурации.
Помимо основных свойств (см. здесь), присущих каждому объекту конфигурации, конфигурация имеет следующие рассмотренные ниже свойства.
5.1.1. Категория свойств «Основные»
Основной режим запуска – выбирается режим запуска системы по умолчанию (Управляемое приложение или Обычное приложение). Для новой конфигурации устанавливается режим запуска Управляемое приложение. Также режим запуска можно изменять для пользователя системы (см. здесь). Данное свойство нельзя изменить, если свойство Режим совместимости установлено в значение Версия 8.1.
Назначения использования – указывает назначение использования прикладного решения (Мобильное устройство или Персональный компьютер). Свойство доступно только в том случае, если свойство Основной режим запуска установлено в значение Управляемое приложение. В зависимости от выбранного назначения использования, изменяются возможности конфигуратора:
● Мобильное устройство – возможна разработка прикладного решения для работы на мобильном устройстве (подробнее см. здесь). При этом разработчику будет доступен ограниченный набор прикладных объектов (список ограничений см. здесь);
● Персональный компьютер – возможна разработка прикладного решения, не предназначенного для функционирования на мобильном устройстве и являющееся собой управляемое приложение;
● Установлены оба флажка (Мобильное устройство и Персональный компьютер) – возможна разработка прикладного решения, которое будет содержать объекты, доступные и на мобильном устройстве и на персональном компьютере в управляемом приложении.
Следует помнить о следующих особенностях:
● Если установлены оба флажка (Мобильное устройство и Персональный компьютер), то возможно изменение значения свойства конфигурации Режим совместимости интерфейса. Перед изменением будет задан вопрос. Изменение будет выполнено только в случае утвердительного ответа на вопрос.
Значение свойства Режим совместимости интерфейса будет изменяться только в том случае, если это свойство установлено в значение Такси. Свойство будет установлено в значение Такси. Разрешить 8.2.
● Если устанавливается только флажок Мобильное устройство, то свойство Режим совместимости интерфейса устанавливается в значение Версия 8.2.
● Если среди назначений использования отсутствует Персональный компьютер, то:
● недоступна возможность изменения основного режима запуска;
● в палитре свойств (см. здесь) объектов конфигурации недоступны свойства, неиспользуемые на мобильной платформе;
● в качестве типов реквизитов могут выступать только типы объектов, доступные на мобильной платформе.
● Если среди назначений конфигурации присутствует Мобильное приложение, то:
● проверка модулей использует настройку для режима Мобильное приложение, этот режим, по умолчанию, предлагается для изменения при редактировании параметров;
● проверка конфигурации использует отдельно хранимую настройку выполняемых проверок;
● синтакс-помощник использует отдельно хранимую настройку наложенных отборов.
Вариант встроенного языка – выбирается основной язык программирования (русский или английский). Выбор определяет, на каком языке будут формироваться языковые конструкции в модулях (например, при использовании синтакс-помощника), формироваться имена свойств для объектов, создаваемых платформой в качестве результата работы, а также имена компонентов формы (элементы, команды, реквизиты, параметры) для форм создаваемых платформой (как в режиме «1С:Предприятие», так и в конфигураторе). Вне зависимости от значения свойства можно использовать как русский, так и английский вариант языковых конструкций. При смене значения свойства вариант написания введенных языковых конструкций не изменяется.
Основные роли – список ролей, которые будут использоваться в том случае, когда список пользователей прикладного решения пустой. В этом случае не выполняется авторизация доступа при начале работы системы и права доступа определяются набором ролей (подробнее о правиле сочетания ролей см. здесь), указанных в свойстве. При этом считается, что пользователь обладает административными правами вне зависимости от значения права Администрирование у всех ролей, указанных в качестве основных. Если не указаны основные роли конфигурации и список пользователей пуст, то пользователь работает без ограничения прав доступа. Роли задаются в ветви дерева конфигурации Общие – Роли (см. здесь).
Основной режим запуска, указанный у прикладного решения, должен соответствовать правам на допустимые приложения, указанные у всех ролей, которые выбраны в свойстве Основные роли. Так, если свойство Основной режим запуска установлено в значение Управляемое приложение, а набор основных ролей не предоставляет право Тонкий клиент, то пользователь не сможет работать с прикладным решением с помощью тонкого клиента.
Модуль управляемого приложения – по ссылке Открыть открывается окно редактирования модуля управляемого приложения (см. здесь).
Модуль сеанса – по ссылке Открыть открывается окно редактирования модуля сеанса (см. здесь).
Модуль внешнего соединения – по ссылке Открыть открывается окно редактирования модуля внешнего соединения (см. здесь).
Использовать управляемые формы в обычном приложении – указывает необходимость использования управляемых форм в обычном режиме толстого клиента. При установке этого флажка изменяются правила выбора формы толстым клиентом (см. здесь), а также изменяются правила централизованной проверки конфигурации (см. здесь).
Примечание. Данное свойство доступно только в том случае, если режим редактирования конфигурации установлен в Управляемое приложение и обычное приложение.
Использовать обычные формы в управляемом приложении – указывает необходимость использования обычных форм в управляемом режиме толстого клиента. При установке этого флажка изменяются правила выбора формы толстым клиентом (подробнее см. здесь), а также изменяются правила централизованной проверки конфигурации (подробнее см. здесь).
Примечание. Данное свойство доступно только в том случае, если режим редактирования конфигурации установлен в Управляемое приложение и обычное приложение.
Дополнительные словари полнотекстового поиска – выбор общих макетов или констант, которые будут выступать в роли дополнительных словарей для полнотекстового поиска (см. здесь).
Требуемые разрешения мобильного приложения – описывает, какие разрешения мобильной операционной системы будет требовать мобильное приложение. Фактические разрешения для мобильного приложения устанавливает прикладное решение, выполняющее сборку мобильного приложения. Разрешения используются при работе под управлением операционных системы Android и Windows/Windows Phone, а при работе под управлением ОС iOS – не используются. Установка того или иного разрешения не приводит к включению или отключению использования соответствующего механизма при работе под управлением ОС Android и Windows/Windows Phone. Поведение мобильного приложения будет зависеть от реакции мобильной ОС на попытку использования «неразрешенной» возможности.
Хранилище общих настроек – данное хранилище предназначено для хранения различных настроек прикладного решения. Платформа самостоятельно не записывает в данное хранилище никаких настроек. Хранилище, указанное в данном свойстве, должен использовать разработчик из встроенного языка, для того чтобы выполнять сохранение/восстановление прикладных настроек пользователя.
Хранилище пользовательских настроек отчетов – в данное хранилище помещаются пользовательские настройки отчетов.
Хранилище вариантов отчетов – в данное хранилище помещаются варианты отчетов.
Хранилище настроек данных форм – в это хранилище сохраняются данные форм. Этим хранилищем можно пользоваться, например, для сохранения реквизитов обработок. При этом можно выбрать индивидуальное хранилище для каждого отчета и обработки.
Хранилище пользовательских настроек динамических списков – в это хранилище сохраняются настройки динамических списков.
Подробнее о хранилищах и работе с ними см. здесь.
5.1.2. Категория свойств «Представление»
Командный интерфейс – по ссылке Открыть открывается редактор, который позволяет задавать видимость подсистем по умолчанию на начальной странице (в том числе в разрезе ролей).
Рабочая область начальной страницы – по ссылке Открыть открывается форма настройки, которая позволяет указать, какие формы располагаются на начальной странице и по какому шаблону будет строиться рабочая область.
Командный интерфейс основного раздела – по ссылке Открыть будет открыт диалог настройки командного интерфейса основного раздела.
Картинка основного раздела – с помощью данного свойства можно изменить картинку основного раздела панели разделов.
Интерфейс клиентского приложения – позволяет настроить расположение панелей по умолчанию для интерфейса Такси. Интерфейс будет принимать такой вид в том случае, когда в редакторе панелей (см. здесь) пользователь нажмет кнопку Стандартные.
Основной язык – указывается основной язык конфигурации.
Краткая информация – краткая информация о конфигурации.
Подробная информация – подробная информация о конфигурации (допускается использование многострочного текста).
Логотип – выбор логотипа. Выбор осуществляется в стандартном окне выбора картинки:

Рис. 77. Выбор картинки
Примечание. Размер картинки для логотипа 64х64 точки или меньше. Тип картинки может быть любым из поддерживаемых системой «1С:Предприятие».
Заставка – выбор заставки. Выбор осуществляется в стандартном окне выбора картинки. Картинка, используемая в качестве заставки, должна иметь размер 600x255 точек. Прозрачность не используется. Тип картинки может быть любым из поддерживаемых системой «1С:Предприятие».
В отдельных случаях предоставляется возможность полной замены заставки, отображаемой при запуске «1С:Предприятия». Для решения по предоставлению такой возможности необходимо обращаться в фирму «1С».
Авторские права – информация об авторе конфигурации.
Адрес информации о поставщике – ссылка на информацию о поставщике конфигурации. Указывается в свойстве Авторские права. Может задаваться как с префиксом схемы (http://), так и без него.
Адрес информации о конфигурации – ссылка на информацию о конфигурации. Может задаваться как с префиксом схемы (http://), так и без него. В окне О программе отображается следующая информация: Синоним конфигурации, свойство Адрес информации о конфигурации, свойство Авторские права, свойство Адрес информации о поставщике конфигурации.
Основная форма констант – выбор основной формы для ввода и редактирования констант конфигурации. Эта форма выбирается из общих форм (см. здесь) в ветви конфигурации Общие – Общие формы. Подробнее про различные формы см. здесь.
Примечание. Данное свойство доступно только в том случае, если режим редактирования конфигурации установлен в Управляемое приложение и обычное приложение.
Свойства Основная форма отчета, Основная форма настроек отчета и Основная форма варианта отчета позволяет указать общие формы, которые будут использоваться отчетами, у которых не указаны соответствующие формы. Например, можно создать общую форму отчета, содержащую некоторые возможности, которые должны присутствовать во всех отчетах прикладного решения, например, отправка сформированного отчета по электронной почте. Для решения такой задачи следует создать общую форму отчета, реализовать в этой форме необходимые команды и указать ее в свойстве конфигурации Основная форма отчета. После этого все отчеты, для которых не указана основная форма отчета, будут использовать созданную общую форму.
Свойство Основная форма настроек динамического списка позволяет указать общую форму, с помощью которой будет выполняться редактирование настроек динамического списка в прикладном решении. Если данное свойство не заполнено – для редактирования настроек динамических списков будет использоваться автоматически генерируемая форма настроек.
Свойство Основная форма поиска позволяет указать общую форму, которая будет использоваться вместо системной формы полнотекстового поиска, которая может быть вызвана в интерфейсе Такси из панели инструментов или с помощью сочетания клавиш.
5.1.3. Категория свойств «Разработка»
В свойствах категории описываются данные о поставщике конфигурации и версии конфигурации (подробнее см. здесь).
Адрес каталога обновлений – содержит адрес ресурса, который может использоваться для обновления прикладного решения.
5.1.4. Категория свойств «Справочная информация»
Включать в содержание справки – если свойство установлено, то содержимое справочной информации включается в общее описание конфигурации.
Справочная информация – по ссылке Открыть открывается окно редактирования описания конфигурации.
5.1.5. Категория свойств «Совместимость»
Режим управления блокировкой данных – вариант управления блокировкой данных в транзакции (см. здесь).
Режим автонумерации объектов – определяет, использовать повторно или нет автоматически полученные номера объектов, если они не записаны в базу данных.
Значение данного свойства ОсвобождатьАвтоматически используется для обеспечения режима работы нумерации, аналогичного версии «1С:Предприятие 8.0». Полученные автоматически номера и коды будут в дальнейшем использоваться, если объект, для которого они получены, не записан.
Значение данного свойства НеОсвобождатьАвтоматически используется для выбора режима работы, когда для объектов, требующих непрерывной нумерации, будет реализовано получение номеров при записи, а не при открытии формы.
Если номер объекта (документа, элемента справочника, плана видов характеристик, бизнес-процесса или задачи) выделялся в транзакции, то он будет повторно использоваться даже в том случае, если установлен режим автонумерации НеОсвобождатьАвтоматически, в том числе в ситуации, когда объект в транзакции не записывался.
Режим автонумерации НеОсвобождатьАвтоматически действует только на номера, которые выданы вне транзакции. Т.е. если номер выдан вне транзакции и код не был использован (объект не был записан), то в режиме НеОсвобождатьАвтоматически номер не будет переиспользован, а в режим ОсвобождатьАвтоматически номер будет переиспользован.
Режим использования модальности – указывает, можно в прикладном решении использовать методы, приводящие к открытию модальных окон или нельзя. Если свойство имеет значение Использовать – модальные окна можно использовать без ограничений. Если свойство имеет значение Не использовать – модальные окно нельзя использовать в данном прикладном решении. При попытке использования методов будет диагностироваться ошибка (в том числе и при синтаксическом контроле текста на встроенном языке). Вместо модальных окон следует использовать блокирующие окна (см. здесь). Если свойство имеет значение Использовать с предупреждением, то при использовании модальных окон ошибки диагностироваться не будут, но в окно сообщений будет выводиться сообщение о том, что использование модальных окон в данном режиме запрещено. При работе в таком режиме также следует заменить модальные окна блокирующие.
Начиная с «1С:Предприятия» версии 8.3.5 поведение тонкого и толстого клиентских приложений несколько изменяется. Описанное выше поведение (только для толстого и тонкого клиентских приложений) будет наблюдаться только при использовании параметра /EnableCheckModal командной строки запуска системы. Если этот параметр не указан, то модальные методы сохраняются работоспособность вне зависимости от свойства конфигурации Режим использования модальности. В частности, данное поведение позволяет использовать внешние обработки, написанные без учета свойства конфигурации Режим использования модальности, в конфигурациях, которые написаны из расчета на то, что данное свойство будет установлено в значение Не использовать.
Если «1С:Предприятие» запускается из конфигуратора (см. здесь), то параметр командной строки запуска /EnableCheckModal устанавливается принудительно, без возможности настройки такого поведения.
Режим использования синхронных вызовов расширений платформы и внешних компонент – свойство управляет возможностью использовать синхронные вызовы для работы с расширениями работы с файлами, криптографией и внешними компонентами. Если свойство установлено в значение Использовать, то на стороне клиента доступны синхронные методы работы с расширениями и внешними компонентами. В том случае, если свойство установлено в значение Не использовать, синхронные методы становятся недоступны в синтакс-помощнике, контекстной подсказке при редактировании модулей и расширенная проверка конфигурации выдает ошибки при обнаружении синхронных вызовов на стороне клиента. Вместо синхронных вызовов стоит использовать асинхронные аналоги. В режиме 1С:Предприятие использование синхронных методов работы с расширениями и внешними компонентами приводит в генерации исключения. Режим Использовать с предупреждениями является промежуточным вариантом, когда применение синхронных методов допускается, но сопровождается предупреждающими сообщениями в режиме 1С:Предприятие и во время расширенной проверки конфигурации.
При работе веб-клиента, под управлением веб-браузера Google Chrome, реализовано следующее поведение:
● Свойство установлено в значение Не использовать – расширения работы с файлами и криптографией, предоставляющие синхронные методы работы, не загружаются. Используются расширения, предоставляющие асинхронные методы работы.
● В остальных случаях – при подключении расширений работы с файлами и криптографией выполняется попытка загрузки расширений, предоставляющих синхронные методы. Если попытка выполнена успешно, то предоставляется возможность использовать и синхронные и асинхронные методы работы с файлами или криптографией. В том случае, если «синхронные» расширения работы с файлами или криптографией не работоспособны, то будут использовать расширения, предоставляющие асинхронные методы.
Необходимо помнить, что поддержка синхронных вызовов в веб-браузере Google Chrome по умолчанию отключена в версии 42 (апрель 2015 года), а полностью удалена в версии 45 (сентябрь 2015 года).
При этом описанное поведение будет наблюдаться только в том случае, если используется параметр /EnableCheckExtensionsAndAddInsSyncCalls командной строки запуска клиентского приложения.
Если «1С:Предприятие» запускается из конфигуратора (см. здесь), то параметр командной строки запуска /EnableCheckExtensionsAndAddInsSyncCalls устанавливается принудительно, без возможности настройки такого поведения.
Режим совместимости интерфейса – свойство управляет режимом интерфейса клиентского приложения:
● Версия 8.2 – клиентское приложение работает в интерфейсе версии 8.2. Переключение в интерфейс Такси невозможно.
● Версия 8.2. Разрешить Такси – по умолчанию используется интерфейс версии 8.2. Возможно переключение на интерфейс Такси с помощью диалога параметров, объект НастройкиКлиентскогоПриложения или командной строки.
● Такси. Разрешить Версия 8.2 – по умолчанию используется интерфейс Такси. Возможно переключение на интерфейс версии 8.2 с помощью диалога параметров, объект НастройкиКлиентскогоПриложения или командной строки.
● Такси – клиентское приложение работает в интерфейсе Такси. Переключение в режим интерфейса 8.2 невозможно.
При использовании интерфейса версии 8.2 допустимо переключение между интерфейсом в отдельных окнах и интерфейсом в закладках.
Если свойство Режим совместимости установлено в значение, большее значения Версия 8.3.2 (Не использовать, Версия 8.3.3 и выше), а свойство Режим совместимости интерфейса установлено в значение Версия 8.2 или Версия 8.2. Разрешить Такси, то для новых пользователей прикладного решения будет автоматически установлен интерфейс в закладках.
Картинка БиблиотекаКартинок.Справка отображается различными способами, если свойство Режим совместимости интерфейса установлено в значение Такси или Такси. Разрешить Версия 8.2 и в остальных случаях.
Режим совместимости – свойство управляет поведением механизмов, которое в новой версии системы изменено по сравнению с предыдущими версиями. Данное свойство может принимать значения Версия 8.3.7, Версия 8.3.6, Версия 8.3.5, Версия 8.3.4, Версия 8.3.3, Версия 8.3.2, Версия 8.3.1, Версия 8.2.16, Версия 8.2.13, Версия 8.1 и Не использовать. Особенности работы системы в режиме совместимости с какой-либо версией см. здесь.
Не поддерживается работа конфигурации с неизвестным режимом совместимости. Неизвестными режимами совместимости являются те, которые соответствуют функциональности, реализуемой в последующих версиях системы «1С:Предприятие». Например, если в версии 8.3.1 установить режим совместимости Не использовать, то он будет считаться неизвестным при открытии конфигурации в версии 8.2.16. При этом, если в версии 8.3.1 установить режим совместимости Версия 8.2.16, то при открытии конфигурации в версии 8.2.16 он будет отображаться как Не использовать. Если в конкретной версии не будет вводиться нового режима совместимости, то действие режима Не использовать будет аналогично предшествующей версии. При попытке запустить или загрузить конфигурацию с неизвестным режимом совместимости, будет выдаваться ошибка с указанием требуемой версии. Запрещена загрузка файлов 1cv8.dt, сформированных в версии 8.3.1 и выше, в «1С:Предприятии» младших версий (младше чем 8.3.1). Исключением является ситуация, когда в версии 8.3.1 свойство конфигурации Режим совместимости установлено в значение Версия 8.2.16.
При конвертации конфигураций версии «1С:Предприятие 8.1» (и более ранних) свойство принимает значение Версия 8.1. В общем случае можно сказать, что при открытии конфигурацией более поздней версией «1С:Предприятия», свойство Режим совместимости будет устанавливаться в значение совместимости с предыдущей версией, если в новой версии введен такой режим.
Если необходимо обеспечить работу прикладного решения сразу в нескольких версиях «1С:Предприятия» (в том числе и для которых есть режим совместимости), то в местах различного вызова кода рекомендуется вначале получать текущую версию платформы и затем сравнивать ее с режимом совместимости (если это необходимо). При этом не рекомендуется проверять режим совместимости на значение НеИспользовать.
Режим совместимости мобильной платформы (см. здесь) имеет несколько отличий:
● Режим совместимости для мобильной платформы не управляется свойствами конфигурации (в том числе и свойством Режим совместимости). Однако данное свойство существует «внутри» мобильного приложения.
● Установка значения режима совместимости происходит в момент создания информационной базы. Значение режима совместимости будет соответствовать версии мобильной платформы, с помощью которой выполнялась операция создания информационной базы.
● Обновление версии мобильной платформы не приводит к обновлению значения режима совместимости.
● При обновлении конфигурации информационной базы мобильного приложения, режим совместимости устанавливается в значение, равное версии мобильной платформы, с помощью которой выполняется обновление конфигурации.
● Соответственно, все методы встроенного языка, поведение которых учитывает режим совместимости, будут учитывать режим совместимости, сформированный по вышеизложенным правилам.
5.2. Модуль управляемого приложения
Более подробное описание модуля управляемого приложения см. здесь.
Модуль управляемого приложения, являясь частью конфигурации, сохраняется только в составе конфигурации. Использование пункта Файл – Сохранить приведет к выполнению процедуры сохранения сделанных изменений применительно ко всей конфигурации.
5.3. Модуль внешнего соединения
Более подробное описание модуля внешнего соединения см. здесь.
5.4. Модуль сеанса
Более подробное описание модуля сеанса см. здесь.
5.5. Ветвь конфигурации «Общие»
В этом разделе описываются некоторые объекты конфигурации, которые располагаются в ветки Общие дерева конфигурации. Эти объекты не описывают структуру данных и механизмы их обработки. Они предназначены для установки правил работы пользователей с данными, описания вспомогательных объектов, используемых для формирования различных форм, в механизме обмена данными, а также содержат общие модули и макеты печатных форм, доступные из любого модуля конфигурации.
5.5.1. Подсистемы
Описание назначения подсистем см. здесь.
Примечание. Не рекомендуется задавать подсистеме имя Desktop.
На структуру объектов ветви Подсистемы не накладывается никаких ограничений по числу и вложенности.
Для просмотра объектов конфигурации, относящихся к определенному набору подсистем, в окне Конфигурация можно произвести настройку фильтра отбора объектов. Следует выбрать пункт Действия – По подсистемам окна Конфигурация и указать необходимый набор подсистем, а также установить дополнительные признаки отбора Включать объекты подчиненных подсистем и Включать объекты родительских подсистем.

Рис. 78. Отбор по подсистемам
В списке подсистем существует специальный пункт <Не входящие в подсистемы>, с помощью которого можно отобрать только те объекты, которые не принадлежат ни одной подсистеме.
Для быстрого отбора объектов, входящих в конкретную подсистему, можно использовать специальную команду контекстного меню: Объекты подсистемы. Выполнение данной команды эквивалентно исполнению команды Действия – По подсистемам с указанием только одной подсистемы в открывшемся диалоге.
Примечание. При установке отбора по подсистемам не показываются ключевые ветви дерева объектов конфигурации, в которых нет отобранных объектов.
Принадлежность объектов конфигурации к определенной подсистеме определяет пользовательский интерфейс.
Значение свойства объекта конфигурации Подсистемы доступно в программе с помощью средств встроенного языка. Это предоставляет дополнительные возможности отбора данных.
Команда контекстного меню Переместить подсистему позволяет изменить подчиненность подсистемы в иерархии подсистем.
Для того чтобы «привязать» объекты метаданных к конкретной подсистеме (подсистемам), служит закладка Состав редактора подсистемы.

Рис. 79. Состав подсистемы
В верхней части окна перечислены все объекты конфигурации, которые могут быть отнесены к различным подсистемам. Отметка объекта галочкой (например, Организации на рис.79) означает, что объект начинает входить в подсистему и появляется в нижней части окна. В нижней части окна перечислены все объекты, которые входят в редактируемую подсистему.
Свойство Картинка позволяет указать картинку, которая будет отображаться в панели разделов (для подсистем верхнего уровня). При указании картинок разного размера, высота панели разделов будет вычисляться в зависимости от режима совместимости интерфейса:
● Версия 8.2:
● Высота панели разделов рассчитывается исходя из того, что вертикальный размер всех картинок равен 48 точек.
● Картинки меньших размеров пропорционально уменьшаются так, чтобы вертикальный размер был равен 48 точек.
● Такси:
● Если есть хотя бы одна картинка раздела, размер которой по вертикали более 48 точек, то все такие картинки пропорционально уменьшаются так, чтобы вертикальный размер был равен 48 точек.
● Если все картинки панели разделов имеют вертикальный размер менее 48 точек, то высота панели разделов рассчитывается на основании максимального вертикального размера картинок, а картинки с меньшими размерами центрируются в областях, отведенных под картинки.
Если свойство Включать в содержание справки установлено, то в содержание справки будет включена ветвь, отображающая справку по подсистеме и всем объектам, входящим в ее состав. Если свойство сброшено, то такая ветвь (описывающая подсистему и объекты, входящие в состав этой подсистемы) в содержании справки будет отсутствовать, но справка по объектам, входящим в подсистему, будет доступна непосредственно в формах самих объектов.
5.5.2. Общие модули
Объекты, расположенные в ветви дерева конфигурации Общие модули, предназначены для размещения в них текстов функций и процедур, которые могут вызываться из любого другого модуля конфигурации.
ВНИМАНИЕ! Общий модуль может содержать только определения процедур и функций.
Процедуры и функции общего модуля, для которых в заголовках указано ключевое слово Экспорт, являются одними из составных частей глобального контекста. Подробнее о написании процедур в общем модуле можно узнать в разделах «Формат исходных текстов программных модулей» и «Операторы» справки по встроенному языку.
Для редактирования общего модуля необходимо в палитре свойств объекта типа Общие модули окна Конфигурация в свойстве Модуль щелкнуть мышью ссылку Открыть. Текст общего модуля будет выдан для редактирования в редакторе текстов системы «1С:Предприятие» в режиме редактирования текста программного модуля.
Общий модуль, являясь частью конфигурации, сохраняется только в составе конфигурации.
Свойство Глобальный определяет, являются ли экспортируемые методы общего модуля частью глобального контекста.
Если свойство Глобальный установлено в значение Истина, то экспортируемые методы общего модуля доступны как методы глобального контекста.
Если свойство Глобальный установлено в значение Ложь, то в глобальном контексте создается свойство с именем, соответствующим имени общего модуля в метаданных. Данное свойство доступно только для чтения. Значением данного свойства является объект ОбщийМодуль. Через данный объект доступны экспортируемые методы данного общего модуля. Таким образом, обращение к методам неглобальных общих модулей выглядит как XXXXX.YYYYY, где XXXXX – это имя свойства, соответствующее контексту общего модуля, а YYYYY – имя экспортируемого метода общего модуля.
Пример:
Копировать в буфер обменаРаботаСТорговымОборудованием.ПодключитьСканерШтрихкодов();
5.5.2.1. Различные контексты и общие модули
С помощью свойств общих модулей и инструкций препроцессора можно организовать выполнение различных методов общих модулей в нужном контексте.
Каждое свойство общего модуля отвечает за возможность компиляции (и исполнения) общего модуля в том или ином контексте.
Доступны следующие свойства, отвечающие за контекст, в котором доступны методы общего модуля:
● Клиент (обычное приложение) – методы общего модуля будут доступны для толстого клиента в режиме обычного приложения;
● Клиент (управляемое приложение) – методы общего модуля будут доступны для тонкого клиента, веб-клиента, а также для толстого клиента в режиме управляемого приложения;
● Сервер – методы общего модуля будут доступны на сервере;
● Внешнее соединение – методы общего модуля будут доступны во внешнем соединении.
Если устанавливаются одновременно несколько свойств, то это означает, что методы общего модуля будут доступны в нескольких контекстах.
Если у общего модуля установлено свойство Сервер и еще какое-либо свойство, то это означает, что общий модуль будет доступен одновременно на сервере и в выбранном клиенте. При этом необходимо понимать, что фактически это будет несколько вариантов скомпилированного кода (по числу выбранных клиентов и собственно для сервера).
При этом если метод, расположенный в таком общем модуле, вызывается со стороны клиента, то будет использована клиентская копия общего модуля, а если с сервера – серверная. В этом случае с помощью директив препроцессора (подробнее см. здесь) можно «оградить» сервер от того кода, который на нем не может исполняться.
Рассмотрим пример. В общем модуле (который может исполняться на тонком клиенте и на сервере) есть метод, который имеет несколько различное поведение на стороне тонкого клиента и на стороне сервера. Посмотрим, как это можно сделать:
Копировать в буфер обменаПроцедура МетодОбщегоМодуля() Экспорт // Тут размещается различный важный код #Если ТонкийКлиент Тогда // Покажем предупреждение ПоказатьОповещениеПользователя("На клиенте"); #КонецЕсли КонецПроцедуры
Тогда на стороне сервера код приобретет следующий вид:
Копировать в буфер обменаПроцедура МетодОбщегоМодуля() Экспорт // Тут размещается различный важный код КонецПроцедуры
А на стороне тонкого клиента код будет иметь следующий вид:
Копировать в буфер обменаПроцедура МетодОбщегоМодуля() Экспорт // Тут размещается различный важный код // Покажем предупреждение ПоказатьОповещениеПользователя("На клиенте"); КонецПроцедуры
Для передачи управления с клиента на сервер существует несколько способов:
● вызвать метод серверного общего модуля;
● в модуле формы или команды вызвать метод, который предваряется директивами компиляции &НаСервере, &НаСервереБезКонтекста (подробнее о модуле формы см. здесь).
При этом из серверных процедур невозможно вызвать методы клиентских общих модулей (у которых не установлено свойство Сервер) и клиентские методы модуля формы или модуля команды. Управление вернется на клиента после того, как будет завершен самый внешний вызов серверного метода.
Исключение составляют методы модуля формы и модуля команды, которые предваряются директивами компиляции &НаКлиентеНаСервере, &НаКлиентеНаСервереБезКонтекста (подробнее см. здесь).
Также следует упомянуть следующие моменты:
● Если общий модуль доступен более чем для одного клиента, то при написании программного кода следует учитывать максимальные ограничения, которые могут накладываться клиентами, либо использовать инструкции препроцессора для «изоляции» кода, специфичного для того или иного клиента.
● Инструкции препроцессора также имеют смысл тогда, когда один общий модуль имеет несколько контекстов исполнения, например, внешнее соединение и тонкий клиент или (что встречается значительно чаще) какой-либо клиент и сервер. В этом случае инструкции препроцессора будут обрамлять интерактивный код, который невозможно использовать на сервере, но возможно на клиенте (см. пример выше).
Подробнее об инструкциях препроцессора и директивах компиляции см. здесь и в разделе «Исполнение процедур и функций» справки по встроенному языку.
Свойство Вызов сервера предназначено для управления возможностью вызова экспортируемых методов серверного общего модуля из клиентского кода. Если свойство установлено, то экспортируемые методы серверного общего модуля доступны для вызова со стороны клиента. Если свойство не установлено, то такие экспортируемые методы можно вызывать только из серверных методов (как методов серверных общих модулей, так и серверных методов модуля формы и модулей команд).
Совет. Рекомендуется устанавливать в значение Ложь свойство Вызов сервера в тех случаях, когда серверный общий модуль содержит методы, которые нежелательно вызывать с клиента (например, по причинам безопасности).
Примечание. Если одновременно установлены свойства Клиент (обычное приложение), Клиент (управляемое приложение), Внешнее соединение, то свойство Вызов сервера автоматически сбрасывается. Если устанавливается свойство Вызов сервера, то автоматически сбрасываются свойства Клиент (обычное приложение), Клиент (управляемое приложение) и Внешнее соединение, если эти свойства были установлены одновременно.
Свойство Привилегированный предназначено для отключения контроля прав доступа при выполнении методов общего модуля.
Примечание. Если свойство Привилегированный установлено, то общему модулю автоматически устанавливается свойство Сервер и сбрасываются остальные свойства (Клиент (обычное приложение), Клиент (управляемое приложение) и Внешнее соединение). Привилегированный общий модуль может исполняться только на сервере.
Подробнее о привилегированном режиме см. здесь.
5.5.2.2. Повторное использование возвращаемых значений
Если общий модуль не является глобальным, то становится доступно свойство Повторное использование возвращаемых значений. Это свойство может принимать следующие значения:
● Не использовать – повторное использование возвращаемых значений для функций этого общего модуля не используется.
● На время вызова и На время сеанса – для общего модуля используется метод определения повторного использования данных. Суть этого метода заключается в том, что в ходе выполнения кода система запоминает параметры и результат работы функций после первого вызова функции. При повторном вызове функции с такими же параметрами, происходит возврат запомненного значения (из первого вызова) без выполнения самой функции. Если функция во время своего выполнения меняет значения параметров, то повторный вызов функции не будет это делать.
Можно выделить следующие особенности сохранения результатов вызова:
● если функция выполняется на сервере и вызывается из серверного кода, то значения параметров и результат вызова запоминаются для текущего сеанса на стороне сервера;
● если функция выполняется на толстом или тонком клиенте, то значения параметров и результатов вызова запоминаются на стороне клиента;
● если функция выполняется на стороне сервера, а вызывается из клиентского кода, то значения параметров вызова запоминаются и на стороне клиента, и на стороне сервера (для текущего сеанса).
Сохраненные значения удаляются:
● если свойство установлено в значение На время вызова:
● на стороне сервера – при возврате управления с сервера;
● на стороне клиента – при завершении работы процедуры или функции встроенного языка верхнего уровня (вызванной системой из интерфейса, а не из другой процедуры или функции встроенного языка);
● если свойство общего модуля установлено в значение На время сеанса:
● на стороне сервера – при окончании сеанса;
● на стороне клиента – при закрытии клиентского приложения.
Сохраненные значения будут удалены:
● на сервере, в толстом клиенте, во внешнем соединении, в тонком клиенте и в веб-клиенте с обычной скоростью соединения – через 20 минут после вычисления сохраняемого значения или через 6 минут после последнего использования;
● в тонком клиенте и веб-клиенте с низкой скоростью соединения – через 20 минут после вычисления сохраняемого значения;
● при нехватке оперативной памяти в рабочем процессе сервера;
● при перезапуске рабочего процесса;
● при переключении клиента на другой рабочий процесс.
После удаления значений вызов экспортируемой функции выполняется как при первом вызове.
На выполнение процедур данное свойство общих модулей не влияет – процедуры выполняются всегда.
Если у общего модуля установлено повторное использование возвращаемых значений, то на типы параметров экспортируемых функции накладывается ряд ограничений. Типы параметров могут быть только:
● Примитивными типами (Неопределено, NULL, Булево, Число, Строка, Дата).
● Любыми ссылками на объекты базы данных.
● Структурами со значениями свойств вышеперечисленных типов. В этом случае идентичность параметров контролируется «по содержимому» структур.
Если экспортируемая функция возвращает какой-либо объект, то фактически возвращается ссылка на объект, хранимый в кеше. Если после получения этой ссылки произойдет изменение состояния объекта, то последующий вызов той же самой функции приведет к возврату ссылки на уже измененный объект без фактического выполнения функции. Такое поведение будет наблюдаться до удаления сохраненного значения (по любой причине). Другими словами – изменение состояния объекта, полученного в результате вызова функции из общего модуля с повторным использованием возвращаемых значений, не является основанием для фактического вызова функции.
Если у общего модуля свойство Повторное использование возвращаемых значений установлено в значение На время сеанса, то в значениях, возвращаемых функциями такого модуля, нельзя использовать значения типа МенеджерВременныхТаблиц.
Если функция общего модуля, с установленным повторным использованием, вызываются из этого же самого общего модуля (например, с именем ОбщийМодуль), то следует помнить о следующей особенности: если функция вызывается по имени МояФункция(), то исполнение функции будет происходить при каждом вызове функции. Для того чтобы использовались сохраненные значения, функция следует вызывать по полному имени: ОбщийМодуль.МояФункция().
Метод глобального контекста ОбновитьПовторноИспользуемыеЗначения() удаляет все повторно используемые значения, как на стороне сервера, так и на стороне клиента, независимо от места вызова метода. После выполнения метода ОбновитьПовторноИспользуемыеЗначения() первый вызов функции будет выполнен полностью.
5.5.3. Параметры сеанса
Параметры сеанса предназначены в основном для использования значений параметров в запросах и условиях ограничения доступа к данным для текущего сеанса.
Использование параметров сеанса снижает время доступа к данным за счет исключения связанных таблиц.
Настройка параметров сеанса производится в палитре свойств.
Для каждого параметра сеанса определены два права доступа – Получение и Установка (подробнее о правах см. раздел ниже). Если право Установка снято, то инициализация данного параметра сеанса возможна только в общем модуле с установленным свойством Привилегированный или в модуле сеанса.
Инициализация параметров сеанса может выполняться в модуле сеанса, в обработчике события УстановкаПараметровСеанса() (см. здесь).
До инициализации значение параметр сеанса неопределено. При попытке чтения такого параметра сначала вызывается обработчик события УстановкаПараметровСеанса(). Если после вызова состояние параметра остается неопределенным, то вызывается исключение.
Следует разделять области применения параметров сеанса и глобальных переменных модуля управляемого приложения (модуля внешнего соединения). Среди основных отличий параметров сеанса:
● Параметры сеанса являются объектами метаданных, что позволяет «1С:Предприятию» осуществлять повышенный контроль за их использованием.
● Параметры сеанса имеют тип. Набор типов параметров сеанса ограничен. Их важной общей чертой является невозможность изменения внутреннего состояния для объектов этих типов.
● Для установки или получения значения параметра сеанса текущий пользователь должен быть наделен соответствующим правом.
● В клиент-серверном варианте «1С:Предприятия» значения параметров сеанса хранятся на сервере и доступны как с сервера, так и с клиента.
● Параметры сеанса доступны как из встроенного языка «1С:Предприятия», например:
Копировать в буфер обменаПараметрыСеанса.ТекущийПользователь = ИмяПользователя()
Так и из ограничений доступа к данным, например:
Копировать в буфер обменаДокумент.Отчет.Пользователь = &ТекущийПользователь
В последнем случае для получения значения параметра сеанса у текущего пользователя наличия соответствующего права не требуется.
Примечание 1. Если параметру сеанса установлен один из следующих типов: ФиксированныйМассив, ФиксированнаяКоллекция или ФиксированнаяСтруктура, то в качестве значения элемента коллекции может выступать значение Неопределено.
Примечание 2. Объем данных, перемещаемых между клиентом и сервером, для установки одного параметра сеанса, не должен превышать 4 Gb (в сериализованном виде).
5.5.4. Роли и права доступа
5.5.4.1. Общая информация
Каждый пользователь системы должен иметь свободный доступ к общей информации, такой как общие справочники, константы или перечисления.
С другой стороны, необходимо, чтобы каждый пользователь имел дело только с той информацией, которая необходима ему для работы, и никак не мог своими неосторожными действиями повлиять на работу других пользователей или на работоспособность системы в целом.
Конфигуратор системы «1С:Предприятие» предоставляет разработчикам развитые средства администрирования, предназначенные для решения указанных задач.
Прежде всего, в процессе создания конфигурации создается необходимое число типовых ролей, описывающих полномочия различных категорий пользователей на доступ к информации, обрабатываемой системой. Роли могут быть заданы в достаточно широких пределах – от возможности только просмотра ограниченного числа видов документов до полного набора прав по вводу, просмотру, корректировке и удалению любых видов данных.
В системе «1С:Предприятие» различают два типа прав – основные и интерактивные. Основные проверяются всегда, независимо от способа обращения к объектам информационной базы. Интерактивные проверяются при выполнении интерактивных операций (просмотр и редактирование в форме и т. д.). Доступные права доступа см. здесь (или в описании метода глобального контекста ПравоДоступа() в синтакс-помощнике).
Если для объекта, данные которого представляются в форме, установлено (разрешено) право Просмотр, но не установлено право Редактирование, то в форме данный реквизит будет показан (элемент управления, связанный с данным объектом, отображает значение реквизита), но редактирование значения будет недоступно. Если снять право Просмотр, то при попытке открытия формы будет выдано предупреждение: Нарушение прав доступа!, и форма не будет открыта.
В списке прав при редактировании роли следует обратить внимание на внутреннюю иерархию прав. Иерархия проявляется в виде «старшинства» прав. При снятии «старшего» права снимаются другие права («младшие»), связанные со «старшим» правом; и наоборот, при установке «младшего» права устанавливаются снятые «старшие» права. Так, при снятии права Просмотр снимается право Редактирование. Что вполне логично, так как нет смысла предоставлять право редактирования при невозможности показа элемента управления, связанного с данными.
В общем случае права можно задавать:
● на всю конфигурацию в целом,
● объекты,
● реквизиты объектов,
● табличные части,
● реквизиты табличных частей,
● стандартные реквизиты.
При создании новой роли устанавливаются следующие права доступа на корневой объект конфигурации: ТонкийКлиент, ВебКлиент, СохранениеДанныхПользователя, Вывод.
5.5.4.2. Привилегированный режим работы
На сервере «1С:Предприятия» фрагменты кода могут исполняться как в обычном, так и в привилегированном режиме. В привилегированном режиме не выполняется проверка доступа на уровне записей, не производится контроль прав и разрешены любые операции, что ускоряет выполнение модулей.
Для управления привилегированным режимом предназначен метод глобального контекста УстановитьПривилегированныйРежим(), который позволяет включать или выключать привилегированный режим.
ВНИМАНИЕ! В клиент-серверном варианте вызов метода не оказывает влияния при работе на стороне клиента.
По умолчанию привилегированный режим выключен.
Количество включений привилегированного режима должно совпадать с количеством выключений. Однако если внутри процедуры или функции происходило включение привилегированного режима (один раз или более), но не происходило его выключение, то система автоматически выполнит выключение столько раз, сколько незавершенных включений было в покидаемой процедуре или функции
Если в процедуре или функции вызовов метода УстановитьПривилегированныйРежим(Ложь) сделано больше, чем вызовов метода УстановитьПривилегированныйРежим(Истина), то будет вызвано исключение.
Функция ПривилегированныйРежим() возвращает Истина, если привилегированный режим еще включен, и Ложь, если он полностью выключен. При этом не анализируется количество установок привилегированного режима в конкретной функции.
Программная установка привилегированного режима может потребоваться в случае массированных операций с данными информационной базы, и при этом нет смысла проверять права доступа к данным. Например, существует пользователь, которому доверили выполнять пересчет цен товаров. Тогда в обработке, например, которая это выполняет, можно проверить право текущего пользователя выполнять данную обработку, а затем включить привилегированный режим и выполнить все необходимые операции с базой данных. При этом у пользователя может не быть прав на чтение цен. Но так как данная обработка не выдает пользователю самих цен, а только их пересчитывает, то поставленные задачи ограничения доступа будут также решены.
Также существует возможность стартовать привилегированный сеанс. Это сеанс, в котором привилегированный режим установлен с самого начала работы системы. При этом во время работы метод ПривилегированныйРежим() будет всегда возвращать Истина, а возможность отключить привилегированный режим не поддерживается. Стартовать привилегированный сеанс может только пользователь, которому доступны административные права (право Администрирование). Запуск сеанса можно выполнить с помощью ключа командной строки запуска клиентского приложения UsePrivilegedMode или параметра строки соединения с информационной базой prmod.
5.5.4.3. Безопасный режим работы
В случае необходимости использования на сервере «ненадежного» программного кода: внешние обработки или программный код, вводимый пользователем для использования в методах Выполнить() и Вычислить(), можно воспользоваться безопасным режимом работы.
В безопасном режиме:
● Привилегированный режим отменяется.
● Переход в привилегированный режим игнорируется.
● Запрещены операции, приводящие к использованию внешних средств по отношению к платформе «1С:Предприятие»:
● Механизмы COM:
● COMОбъект(),
● ПолучитьCOMОбъект(),
● ОболочкаHTMLДокумента.ПолучитьCOMОбъект().
● Загрузка внешних компонентов:
● ЗагрузитьВнешнююКомпоненту(),
● ПодключитьВнешнююКомпоненту().
● Доступ к файловой системе:
● ЗначениеВФайл(),
● КопироватьФайл(),
● ОбъединитьФайлы(),
● ПереместитьФайл(),
● РазделитьФайл(),
● СоздатьКаталог(),
● УдалитьФайлы(),
● Новый Файл,
● Новый xBase,
● ЗаписьHTML.ОткрытьФайл(),
● ЧтениеHTML.ОткрытьФайл(),
● ЧтениеXML.ОткрытьФайл(),
● ЗаписьXML.ОткрытьФайл(),
● ЧтениеFastInfoset.ОткрытьФайл(),
● ЗаписьFastInfoset.ОткрытьФайл(),
● КаноническаяЗаписьXML.ОткрытьФайл(),
● ПреобразованиеXSL.ЗагрузитьИзФайла(),
● ЗаписьZipФайла.Открыть(),
● ЧтениеZipФайла.Открыть(),
● Новый ЧтениеТекста(),
● Новый ЗаписьТекста(),
● Новый ИзвлечениеТекста(),
● изменение свойства ИзвлечениеТекста.ИмяФайла,
● ИзвлечениеТекста.Записать(),
● Новый Картинка(), если первый параметр – строка;
● Картинка.Записать();
● Новый ДвоичныеДанные();
● ДвоичныеДанные.Записать();
● ФорматированныйДокумент.Записать();
● ГеографическаяСхема.Прочитать();
● ГеографическаяСхема.Записать();
● ГеографическаяСхема.Напечатать();
● ТабличныйДокумент.Прочитать();
● ТабличныйДокумент.Записать();
● ТабличныйДокумент.Напечатать();
● ГрафическаяСхема.Прочитать();
● ГрафическаяСхема.Записать();
● ГрафическаяСхема.Напечатать();
● ТекстовыйДокумент.Прочитать();
● ТекстовыйДокумент.Записать().
● Доступ к Интернету:
● Новый ИнтернетСоединение,
● Новый ИнтернетПочта,
● Новый ИнтернетПрокси,
● Новый HTTPСоединение,
● Новый FTPСоединение.
ВНИМАНИЕ! При выполнении запрещенных операций во время выполнения генерирует исключение.
Примечание. Внешние отчеты и обработки, открываемые с помощью меню Файл – Открыть, выполняются в безопасном режиме, если у пользователя отсутствуют административные права доступа.
Количество включений безопасного режима должно совпадать с количеством выключений. Однако если внутри процедуры или функции происходило включение безопасного режима (один раз или более), но не происходило его выключение, то система автоматически выполнит выключение столько раз, сколько незавершенных включений было в покидаемой процедуре или функции.
Если в процедуре или функции вызовов метода УстановитьБезопасныйРежим(Ложь) сделано больше, чем вызовов метода УстановитьБезопасныйРежим(Истина), то будет вызвано исключение.
Программная установка безопасного режима может потребоваться в том случае, когда разработчик конфигурации предполагает использование стороннего (по отношению к конфигурации) программного кода, надежность которого разработчик гарантировать не может. Примером такого кода является выполнение методов Выполнить() и Вычислить() в тех случаях, когда исполняемый код получается из внешнего мира. В этом случае хорошей практикой будет установка безопасного режима до выполнения этих методов:
Копировать в буфер обмена// Формируется программный код, который следует исполнить // Возможно, что код загружается из внешних источников // или введен вручную ИсполняемыйКод = ПолучитьВыполняемыйКодИзВнешнегоМира(); // Включим безопасный режим УстановитьБезопасныйРежим(Истина); // Выполним потенциально опасный код Выполнить(ИсполняемыйКод); // Выключим безопасный режим УстановитьБезопасныйРежим(Ложь);
5.5.4.4. Режимы удаления данных
Система «1С:Предприятие» предоставляет пользователям возможность удаления лишней или устаревшей информации в двух режимах:
● непосредственное удаление объектов, при котором не производится анализ использования удаляемого объекта в других объектах базы данных;
● использование контроля ссылочной целостности, при котором объекты сначала помечаются на удаление, а затем производится контроль наличия ссылок на эти объекты в других объектах.
Если пользователю разрешен режим непосредственного удаления, то в этом случае дополнительная ответственность ложится и на пользователя, выполняющего удаление объектов, и на разработчика (администратора системы), определяющего права пользователей и действия системы при неразрешенных ссылках. Работа системы без контроля ссылочной целостности может, например, быть использована специалистами в процессе отладки конфигурации. Если контроль ссылочной целостности не используется, то удаление объектов происходит непосредственно (без пометки на удаление) и появляется возможность образования неразрешенных ссылок.
Самым радикальным способом установки режима контроля ссылочной целостности является отключение прав непосредственного удаления объектов в целом. Таким способом полностью исключается возможность в пределах данной конфигурации непосредственно удалять объекты. Пользователи будут иметь возможность только помечать объекты на удаление.
Заметим, что также существует возможность непосредственного удаления объектов средствами встроенного языка. Поэтому элементы конкретной конфигурации могут выполнять непосредственное удаление в обход механизма контроля ссылочной целостности. В этом случае ответственность за целостность данных лежит на специалисте, выполняющем конфигурирование системы.
5.5.4.5. Правила сочетания ролей
Роли обычно указываются для каждого вида деятельности. При включении в список пользователей нового пользователя (см. здесь) ему может быть назначена определенная роль или совокупность ролей. В случае использования нескольких ролей алгоритм предоставления доступа по каждому объекту и виду права доступа (например, Пометка на удаление) будет работать следующим образом:
● если хотя бы в одной роли есть разрешение, то доступ будет открыт;
● если во всех ролях есть запрещение, то доступ будет закрыт.
5.5.4.6. Редактор прав доступа
В левой части окна редактирования прав выводится дерево объектов конфигурации по всем подсистемам. В правой – список прав по выбранному объекту конфигурации в дереве конфигурации. Если для действия установлен флажок, то оно разрешено.
Так, например, для пользователя с ролью МенеджерПоПродажам разрешен просмотр документа ПриходТовара и запрещено его интерактивное добавление.

Рис. 80. Редактор прав доступа роли
Состояние флажка Устанавливать права для новых объектов определяет, будут ли установлены права для этой роли на новые добавляемые объекты конфигурации (снят по умолчанию для новой роли).
Состояние флажка Устанавливать права для реквизитов и табличных частей по умолчанию определяет, будут ли установлены права для этой роли на реквизиты (включая стандартные) и табличные части (включая стандартные) для новых объектов конфигурации (установлен по умолчанию).
При изменении состояния флажка Устанавливать права для реквизитов и табличных частей по умолчанию система предлагает изменить (установить или сбросить) права доступа для всех реквизитов (включая стандартные) и табличных частей (включая стандартные) всех объектов конфигурации. В случае отказа от предлагаемого действия изменений в существующих объектах не происходит, а изменяется только поведение по умолчанию для новых объектов.
При создании новой роли все права устанавливаются конфигуратором в следующее состояние:
● для объектов права не установлены;
● для реквизитов (включая стандартные) и табличных частей (включая стандартные) права установлены.
Флажок Независимые права подчиненных объектов определяет, каким образом система будет учитывать состояние прав на родительский объект при определении прав на подчиненный объект. Если флажок установлен, то права родительского объекта не учитываются. Если флажок снят, то при определении права подчиненного объекта анализируется соответствующее право родительского объекта. Если у родительского объекта право отсутствует, у подчиненного объекта также отсутствует право, вне зависимости от состояния права у подчиненного объекта.
Флажок Независимые права подчиненных объектов не отменяет того факта, что право на подчиненный объект требует наличия этого же права и на родительский. То есть для реквизита или табличной части нужно право на объект, для реквизита табличной части – на табличную часть и объект. Указанное свойство имеет влияние в том случае, если у пользователю назначено несколько ролей, права которых складываются «по ИЛИ». То есть, если в роли установлено свойство Независимые права подчиненных объектов и есть право только на реквизит, а в другой роли есть право только на объект, то после сложения прав ролей у пользователя будет право на реквизит
При назначении прав доступа на реквизиты (табличные части) отчетов/обработок следует помнить следующую особенность: если у роли снят флажок Независимые права подчиненных объектов и для реквизита (табличной части) установлено право Редактирование, а для отчета/обработки право Просмотр не установлено, то считается, что и для реквизита (табличной части) право Редактирование не установлено.
Если пользователю назначено несколько ролей, то проверка прав родительского объекта выполняется до того, как будет выполнено сочетание прав по ролям (для определения результирующего права на объект), см. здесь.
Действие флажка Независимые права подчиненных объектов распространяется на следующие объекты:
● реквизиты (включая стандартные);
● табличные части (включая стандартные);
● реквизиты табличных частей (включая реквизиты стандартных табличных частей);
● команды.
Чтобы изменить право доступа, в левом списке следует выбрать объект конфигурации, а в правом изменить состояние флажка в нужной строке вида действия. Если требуется изменить доступ сразу ко всем объектам выбранной ветви, нужно указать в левой части эту ветвь и изменить установку прав доступа.
Описание каждой роли можно вывести в табличный или текстовый документ с помощью пункта Действия – Вывести список.
5.5.4.7. Просмотр и редактирование всех ролей
Если в конфигурации используется несколько ролей, то для удобства просмотра и редактирования прав рекомендуется использовать окно Все роли. Для его открытия в дереве объектов конфигурации окна Конфигурация нужно указать ветвь Роли и в контекстном меню выбрать команду Все роли.

Рис. 81. Окно редактирования «Все роли»
В окне расположены три табличных поля. В первом (слева) производится выбор нужного объекта конфигурации. В первой колонке второго табличного поля выводится список прав по выбранному объекту. Другие колонки предназначены для указания использования каждого права для каждой существующей роли.
Если для какой-нибудь роли требуется установить или снять все права, то достаточно в первой строке табличного поля установить или снять флажок разрешения.
Если для какого-нибудь права требуется установить или снять его разрешение во всех ролях, то достаточно в первой колонке табличного поля установить или снять флажок разрешения.
Поддерживается возможность перестановки колонок, соответствующих ролям.
В третьем табличном поле редактируются условия доступа к данным на уровне отдельных полей и записей.
5.5.4.8. Ограничение доступа к данным
5.5.4.8.1. Общие замечания
Механизм ограничений доступа к данным (также известный как RLS, Row Level Security) позволяет управлять правами доступа не только на уровне объектов метаданных, но и на уровне объектов базы данных «1С:Предприятия». Для ограничения доступа к данным могут быть использованы следующие объекты «1С:Предприятия»:
● роли,
● параметры сеанса,
● функциональные опции,
● привилегированные общие модули,
● ключевое слово РАЗРЕШЕННЫЕ в языке запросов.
Совместное использование перечисленных объектов позволяет обеспечить максимальную гибкость при необходимости разграничения прав доступа к данным между пользователями, выполняющими различные функции.
Ограничения доступа к данным могут накладываться на следующие операции с данными (права доступа): чтение (право Чтение), добавление (право Добавление), изменение (право Изменение) и удаление (право Удаление). Текущий пользователь будет иметь возможность выполнить требуемую операцию в следующих случаях:
● Для операций чтения и удаления объект, находящийся в базе данных, должен соответствовать ограничению доступа к данным.
● Для операции добавления ограничению доступа к данным должен соответствовать объект, который планируется записать в базу данных.
● Для операции изменения ограничению доступа к данным должен соответствовать объект как до изменения (чтобы объект был прочитан), так и после изменения (чтобы объект был записан).
При наложении ограничений доступа к данным следует помнить, что для операций изменения, добавления и удаления можно задать только одно условие, а для операции чтения можно задать более одного ограничения доступа к данным. Это означает, что для чтения разных полей объекта могут быть заданы разные условия, причем при задании условия можно указать как имя конкретного поля, так и специальное поле Прочие поля. В первом случае условие будет накладываться только в том случае, если в выборке (которой выполняется чтение данных) будет присутствовать поле, для которого задано ограничение, а во втором – ограничение будет накладываться для всех полей объекта, кроме полей, для которых ограничения заданы явным образом.
При задании ограничения на конкретное поле, это поле будет считано в том случае, если ограничение выполняется, а при задании ограничения на Прочие поля, данные объекта будут прочитаны только в том случае, если ограничение выполняется для всех полей объекта, попавших в запрос чтения данных.
Для объектов базы данных следующих видов могут быть наложены различные ограничения на разные виды изменений (добавление, модификацию, удаление):
● Планы обмена,
● Справочники,
● Документы,
● Планы видов характеристик,
● Планы счетов,
● Планы видов расчета,
● Бизнес-процессы,
● Задачи.
Для следующих видов объектов базы данных возможно наложение ограничений на чтение не только всего объекта целиком, но и отдельных его полей:
● Планы обмена,
● Справочники,
● Документы,
● Журналы документов,
● Планы видов характеристик,
● Планы счетов,
● Планы видов расчета,
● Регистры сведений,
● Бизнес-процессы,
● Задачи.
ВНИМАНИЕ! При обращении к полям объектов базы данных посредством свойств прикладных объектов из встроенного языка «1С:Предприятия» выполняется чтение всего объекта целиком, а не только значения используемого поля. Исключением является получение представления, когда будут прочитаны только значения полей, участвующих в формировании представления.
Ограничения доступа содержатся в ролях, они могут быть указаны для большинства объектов метаданных и записываются на специальном языке, являющимся подмножеством языка запросов.
5.5.4.8.2. Язык ограничения доступа к данным
Ограничения доступа к данным описываются на специальном языке, являющимся подмножеством языка запросов (подробное описание языка запросов см. здесь). Язык ограничения доступа к данным имеет следующие изменения относительно языка запросов:
● В запросе ограничения доступа к данным всегда присутствует одна таблица в качестве источника данных – это таблица объекта, на который накладывается ограничение (основной объект ограничения).
● Сокращено описание запроса. Язык ограничения доступа к данным использует только секции ИЗ и ГДЕ языка запросов. Так, описание языка запросов выглядит следующим образом:
<Описание запроса>
Копировать в буфер обменаВЫБРАТЬ [РАЗРЕШЕННЫЕ] [РАЗЛИЧНЫЕ] [ПЕРВЫЕ <Количество>] <Список полей выборки> [ИЗ <Список источников>] [ГДЕ <Условие отбора>] [СГРУППИРОВАТЬ ПО <Поля группировки>] [ИМЕЮЩИЕ <Условие отбора>] [ДЛЯ ИЗМЕНЕНИЯ [<Список таблиц верхнего уровня>]]
В то время как описание языка запросов ограничения доступа к данным выглядит следующим образом:
<Описание запроса>
Копировать в буфер обмена[Псевдоним таблицы основного объекта ограничения] [ИЗ <Список источников>] [ГДЕ <Условие отбора>]
Описание списка источников см. здесь. Описание условий отбора см. здесь. При этом следует помнить, что во вложенных запросах, используемых в языке ограничения доступа к данным, ограничен набор допустимых возможностей (см. здесь);
● В качестве элементов условий можно указывать параметры сеанса (см. здесь) и функциональные опции (см. здесь);
● В любом месте запроса ограничения доступа к данным допустимо использование шаблонов, упрощающих написание ограничений (см. здесь).
Главной частью ограничения является условие, которое вычисляется для каждой записи таблицы базы данных, на которую накладывается ограничение доступа к данным. Запись считается доступной в том случае, если в результате работы условия для одной записи таблицы основного объекта ограничения получена не пустая таблица (т.е. таблица, в которой 1 или более записей). Если в результате работы условия получается пустая таблица – запись, для которой условие исполнилось таким образом, считается недоступной. Причем изменение записи таблицы основного объекта ограничения считается допустимым, если запись не противоречит ограничению, указанному для права, как до выполнения операции изменения, так и после выполнения этой операции.
Поля таблиц
В ограничениях доступа к данным можно использовать:
● Поля таблиц объекта, для которого описывается ограничение доступа к данным.
Например, если ограничение накладывается на чтение элементов справочника Контрагенты, то в ограничении могут использоваться поля справочника Контрагенты и его табличных частей. В частности, наиболее простые ограничения на чтение элементов справочника Контрагенты могут выглядеть так:
Копировать в буфер обменаГДЕ Наименование = "Кирпичный завод"
Или так:
Копировать в буфер обменаГДЕ Продукция.Наименование = "Кирпич красный"
Где Продукция – это табличная часть справочника Контрагенты.
● Поля таблиц объектов, доступных по ссылкам в основном объекте ограничения.
Например, если реквизит ОсновнойМенеджер справочника Контрагенты имеет тип ссылки на справочник Пользователи, то ограничение доступа может иметь, например, следующий вид:
Копировать в буфер обменаГДЕ ОсновнойМенеджер.Код = "Иванов"
Или:
Копировать в буфер обменаГДЕ ОсновнойМенеджер.ФизическоеЛицо.Наименование = "Петровский"
● Поля таблиц объектов, связанных с основным объектом ограничения некоторыми условиями и выражения над ними.
Например, на чтение элементов справочника Контрагенты может быть наложено следующее ограничение:
Копировать в буфер обменаКонтрагенты ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ Справочник.Пользователи КАК Пользователи ПО Контрагенты.ОсновнойМенеджер.Наименование = Пользователи.Наименование ГДЕ Пользователи.ФизическоеЛицо.Наименование = "Петровский"
В этом ограничении используются поля элементов справочника Пользователи, связанных с данным элементом справочника Контрагенты по значению полей Наименование.
Вложенные запросы
Вложенные запросы используются для формирования наборов записей, которые могут использоваться:
● для связывания с таблицей основного объекта ограничения;
● для использования в качестве операнда операций сравнения В или НЕ В.
Во вложенных запросах могут использоваться любые средства языка запросов, кроме:
● оператора В ИЕРАРХИИ;
● предложения ИТОГИ;
● результаты вложенных запросов не должны содержать табличные части;
● некоторых виртуальных таблиц, в частности ОстаткиИОбороты.
В следующем примере ограничения на чтение из справочника Контрагенты, вложенный запрос используется в качестве набора записей для связывания с основным объектом ограничения:
Копировать в буфер обменаКонтрагенты ИЗ Справочник.Контрагенты КАК Контрагенты ЛЕВОЕ СОЕДИНЕНИЕ (ВЫБРАТЬ Пользователи.Наименование, Пользователи.ФизическоеЛицо ИЗ Справочник.Пользователи КАК Пользователи ГДЕ Пользователи.Код > "Петечкин") КАК Пользователи ПО Контрагенты.ОсновнойМенеджер.Наименование = Пользователи.Наименование ГДЕ Пользователи.ФизическоеЛицо.Наименование = "Петровский"
В следующем примере приведено ограничение на чтение из справочника ПаспортныеДанныеФизЛиц, в котором вложенный запрос используется в качестве операнда операции сравнения В:
Копировать в буфер обменаПаспортныеДанныеФизЛиц ГДЕ ПаспортныеДанныеФизЛиц.ФизЛицо В (ВЫБРАТЬ РАЗЛИЧНЫЕ Работники.ФизЛицо КАК ФизЛицо ИЗ РегистрСведений.Работники КАК Работники)
Если во вложенном запросе необходимо получить данные из табличной части, то в разделе ИЗ вложенного запроса необходимо обращаться непосредственно к табличной части. Например, вместо:
Копировать в буфер обменаВЫБРАТЬ Ссылка КАК Ссылка, Продукция.Наименование КАК НаименованиеПродукции ИЗ Справочник.Контрагенты
в качестве запроса, вложенного в ограничение, следует использовать:
Копировать в буфер обменаВЫБРАТЬ Ссылка КАК Ссылка, Наименование КАК НаименованиеПродукции ИЗ Справочник.Контрагенты.Продукция
Параметры сеанса
В составе запросов ограничения доступа к данным могут входить параметры сеанса. Например, на чтение элементов справочника ГруппыПисемЭлектроннойПочты может быть задано следующее ограничение доступа:
Копировать в буфер обменаГДЕ Владелец.ДоступКУчетнойЗаписи.Пользователь = &ТекущийПользователь И Владелец.ДоступКУчетнойЗаписи.Администрирование = ИСТИНА
Где ТекущийПользователь – это параметр сеанса (см. здесь).
Функциональные опции
В составе запросов ограничения доступа к данным могут входить функциональные опции. Могут использоваться только не зависящие от параметров функциональные опции. Например, если у справочника Номенклатура есть реквизит ОсновнойСклад, то ограничение на чтение данного реквизита может выглядеть следующим образом:
Копировать в буфер обменаГДЕ &УчетПоСкладам = ИСТИНА
Где УчетПоСкладам – это функциональная опция (см. здесь).
Особенности использования
В ограничениях на объекты базы данных следующих типов могут быть использованы не все поля основного объекта данных ограничения:
● в регистрах накопления ограничения доступа могут содержать только измерения основного объекта ограничения;
● в регистрах бухгалтерии в ограничениях можно использовать только балансовые измерения основного объекта ограничения.
Примечание. Если в условиях ограничения доступа к данным оборотного регистра накопления используются измерения, не входящие в итоги, то при обращении к виртуальной таблице оборотов не используются хранимые итоги и запрос выполняется полностью по таблице движений.
5.5.4.8.3. Действия ограничения доступа
Ограничения доступа проверяются при любом выполнении соответствующих операций над объектами базы данных (из диалогов, из встроенного языка, посредством запросов) и могут действовать одним из двух способов:
● Все. Способ «все» подразумевает, что некоторая операция над данными (из диалогов, из встроенного языка или посредством запросов) должна быть выполнена над всеми подразумеваемыми данной операцией объектами базы данных. Если при выполнении такой операции должны быть прочитаны или изменены объекты базы данных, для которых не выполняются соответствующие ограничения доступа, то операция завершается аварийно из-за нарушения прав доступа.
● Разрешенные. Способ «разрешенные» подразумевает, что при выполнении операции над данными должны быть прочитаны только те объекты базы данных, которые удовлетворяют соответствующим ограничениям доступа. Объекты базы данных, не удовлетворяющие ограничениям доступа, при выполнении такой операции считаются отсутствующими и на результат операции не влияют.
Ограничения доступа к данным накладываются на объекты базы данных в момент обращения «1С:Предприятия» к базе данных. В клиент-серверном варианте «1С:Предприятия» наложение ограничений выполняется на сервере «1С:Предприятия».
Способ действия ограничений, выбираемый для выполнения каждой операции над данными, определяется назначением этой операции и степенью ответственности ее результатов. В частности, способ «разрешенные» используется при отображении динамических списков и некоторых других интерактивных действиях. Способ «все» используется при выполнении любых операций с прикладными объектами из встроенного языка «1С:Предприятия», в том числе при любых изменениях объектов базы данных. Поэтому, например, могут возникнуть затруднения при построении отбора для метода Выбрать() менеджеров справочников, документов и других с последующим обходом результата в том случае, если на соответствующий объект установлено достаточно сложное ограничение, поскольку не всякое условие в ограничении прав доступа может быть адекватно представлено в виде отбора для метода Выбрать().
В запросах способом действия ограничений доступа к данным можно управлять. Для этого в языке запросов предусмотрено ключевое слово РАЗРЕШЕННЫЕ. Если в запросе не указано РАЗРЕШЕННЫЕ, то ограничения действуют способом «все». Если слово РАЗРЕШЕННЫЕ указано, то выбирается способ «разрешенные».
Важно, что если в запросе не указано ключевое слово РАЗРЕШЕННЫЕ, то все отборы, заданные в этом запросе, не должны противоречить ни одному из ограничений на чтение объектов базы данных, используемых в запросе. При этом если в запросе используются виртуальные таблицы, то соответствующие отборы должны быть наложены и на сами виртуальные таблицы.
Пример:
Копировать в буфер обменаВЫБРАТЬ КонтактнаяИнформацияСрезПервых.Представление ИЗ РегистрСведений.КонтактнаяИнформация.СрезПоследних(, Тип = &Тип) КАК КонтактнаяИнформацияСрезПервых ГДЕ КонтактнаяИнформацияСрезПервых.Тип = &Тип
При использовании объектной техники не поддерживается получение доступа к данным в режиме РАЗРЕШЕННЫЕ. Предполагается, что объектная техника используется для наиболее ответственных операций над данными, в том числе для их изменения. Для получения при помощи объектной техники всех данных, независимо от установленных ограничений, можно выполнять необходимые действия в привилегированном модуле или от имени пользователя с полными правами. Средств получения только разрешенных данных в объектной технике не предусмотрено.
5.5.4.8.4. Механизм наложения ограничений
Любая операция над данными, хранимыми в базе данных, в «1С:Предприятии» в конечном счете приводит к обращению к базе данных с некоторым запросом на чтение или изменение данных. В процессе исполнения запросов к базе данных внутренние механизмы «1С:Предприятия» выполняют наложение ограничений доступа. При этом:
● Формируется список прав (чтение, добавление, изменение, удаление), список таблиц базы данных и список полей, используемых этим запросом.
● Из всех ролей текущего пользователя выбираются ограничения доступа к данным для всех прав, таблиц и полей, задействованных в запросе. При этом если какая-нибудь роль не содержит ограничений доступа к данным какой-нибудь таблицы или поля, то это значит, что в данной таблице доступны значения требуемых полей из любой записи. Иначе говоря, отсутствие ограничения доступа к данным означает наличие ограничения ГДЕ Истина.
● Получаются текущие значения всех параметров сеанса и функциональных опций, участвующих в выбранных ограничениях.
Для получения значения параметра сеанса от текущего пользователя не требуется наличие права на получение этого значения. Однако если значение некоторого параметра сеанса не было установлено, то произойдет ошибка и запрос к базе данных выполнен не будет.
На получение функциональных опций оказывает влияние свойство функциональной опции Привилегированный режим при получении (см. здесь). Если это свойство сброшено, то текущий пользователь должен обладать правами на чтение объекта, в котором хранится функциональная опция.
● Ограничения, полученные из одной роли, объединяются операцией И.
● Ограничения, полученные из разных ролей, объединяются операцией ИЛИ.
● Построенные условия добавляются к SQL-запросам, с которыми «1С:Предприятие» обращается к СУБД. При обращении к данным со стороны условий ограничения доступа проверка прав не выполняется (ни к объектам метаданных, ни к объектам базы данных). Причем механизм добавления условий зависит от выбранного способа действия ограничений «все» или «разрешенные».
Способ «все»
При наложении ограничений способом «все» к SQL-запросам добавляются условия и поля так, чтобы «1С:Предприятие» могло получить информацию о том, были ли в процессе исполнения запроса к базе данных использованы данные, запрещенные для данного пользователя или нет. Если запрещенные данные были использованы, то инициируется аварийное завершение запроса. Наложение ограничений доступа способом «все» схематически представлено на рис. 82:

Рис. 82. Способ «все»
Способ «разрешенные»
При наложении ограничений способом «разрешенные» к SQL-запросам добавляются такие условия, чтобы запрещенные текущему пользователю записи не оказывали влияния на результат запроса. Иначе говоря, при наложении ограничений в режиме «разрешенные» запрещенные данному пользователю записи считаются отсутствующими, что схематически представлено на рис. 83:

Рис. 83. Способ «разрешенные»
5.5.4.8.5. Другие объекты, связанные с ограничениями доступа к данным
При разработке конфигураций с использованием ограничений доступа к данным могут оказаться полезными такие объекты метаданных, как параметры сеанса, функциональные опции и общие модули с флажком Привилегированный.
Параметры сеанса
Параметры сеанса могут использоваться в ограничениях доступа к данным аналогично тому, как в запросе могут использоваться параметры запроса.
Функциональные опции
Не зависящие от параметров функциональные опции могут использоваться в ограничениях доступа к данным аналогично тому, как в запросе могут использоваться параметры запроса.
Привилегированные общие модули
Если для общего модуля установлен флажок Привилегированный, то исполнение процедур и функций этого модуля приобретает важную специфику:
● В клиент-серверном варианте «1С:Предприятия» привилегированным может быть только тот модуль, который исполняется на сервере.
● Исполнение процедур и функций привилегированного модуля и всего, что из них вызвано, выполняется при выключенной системе ограничения прав, как к объектам метаданных, так и к данным. Таким образом, из привилегированного модуля может быть выполнена любая операция над любыми объектами даже в том случае, если текущий пользователь не имеет соответствующих прав.
Привилегированные модули предназначены для начальной установки значений параметров сеанса, используемых в ограничениях доступа к данным. Еще общие модули могут быть использованы для некоторых целостных действий над данными со стороны пользователя с ограниченными правами. Например, если в функции пользователя входит ввод и проведение документов, но пользователь не должен иметь доступа к данным, на которые влияет проведение документа, то выполнение операции проведения может быть вынесено в привилегированный модуль. Это позволит пользователю проводить документы без предоставления ему прав на другую информацию (регистры, например).
Привилегированный режим
Имеется возможность программной установки привилегированного режима при работе с данными. Программная установка привилегированного режима может потребоваться в случае массированных операций с данными информационной базы, и при этом нет смысла проверять права доступа к данным. Описание привилегированного режима см. здесь.
5.5.4.8.6. Использование препроцессора
При редактировании текста ограничения доступа к данным возможно использование инструкций препроцессора. Доступны следующие инструкции:
Копировать в буфер обмена#ЕСЛИ <Выражение> #ТОГДА #ИНАЧЕЕСЛИ <Выражение> #ТОГДА #ИНАЧЕ #КОНЕЦЕСЛИ
<Выражение> – произвольное логическое выражение на встроенном языке, результат которого имеет тип Булево. Выражение может содержать:
● операции сравнения <, >, <=, >= , =, <>;
● логические операции И, ИЛИ, НЕ;
● параметры сеанса – используется синтаксис &Параметр, где Параметр – имя параметра сеанса.
Если результатом выражения инструкции #ЕСЛИ или #ИНАЧЕЕСЛИ является значение Истина, то в результирующий текст инструкции ограничения доступа помещается текст, расположенный после ключевого слова #ТОГДА. Если же результатом выражения является значение Ложь, то текст, расположенный после ключевого слова #ТОГДА, не помещается в текст инструкции ограничения доступа. Текст, расположенный после инструкции #ИНАЧЕ, будет помещен в результирующий текст ограничения доступа, если ни одно из ранних условий не было выполнено.
Примечание. Если текст ограничения доступа к данным содержит инструкции препроцессора, то такое ограничение не проходит проверку синтаксиса при редактировании и не может быть изменено при помощи конструктора.
Пример:
Копировать в буфер обмена#ЕСЛИ &ТекущийПользователь <> "Климова" #ТОГДА <текст ограничения доступа> #КОНЕЦЕСЛИ
Здесь ТекущийПользователь – параметр сеанса типа СправочникСсылка.Пользователи.
Такая конструкция означает, что условие для установки ограничения доступа будет проверяться для всех пользователей из справочника, кроме пользователя Климовой.
5.5.4.8.7. Шаблоны текста ограничения доступа
Роль может содержать список шаблонов ограничения доступа, которые описываются на закладке Шаблоны ограничений формы роли. Также шаблоны ограничения доступа можно редактировать в редакторе группового редактирования ограничений доступа и шаблонов (см. здесь).
Каждый шаблон ограничения доступа имеет имя и текст. Имя шаблона подчиняется обычным правилам для имен, принятых в системе «1С:Предприятие».
Текст шаблона содержит часть текста на языке ограничения доступа к данным и может содержать параметры, которые выделяются при помощи символа "#".
После символа "#" могут следовать:
● Одно из ключевых слов:
● Параметр, после которого в скобках указывается номер параметра в шаблоне;
● ТекущаяТаблица – обозначает вставку в текст полного имени таблицы, для которой строится ограничение;
● ИмяТекущейТаблицы – обозначает вставку в текст полного имени таблицы (как строковое значение, в кавычках), к которой применяется инструкция, на текущем варианте встроенного языка;
● ИмяТекущегоПраваДоступа – содержит имя права, для которого выполняется текущее ограничение: ЧТЕНИЕ/READ, ДОБАВЛЕНИЕ/INSERT, ИЗМЕНЕНИЕ/UPDATE, УДАЛЕНИЕ/DELETE;
● имя параметра шаблона – означает вставку в текст ограничения соответствующего параметра шаблона;
● символ "#" – обозначает вставку в текст одного символа "#".
В выражении ограничения доступа могут содержаться:
● Шаблон ограничения доступа, который указывается в формате #ИмяШаблона("Значение параметра шаблона 1", "Значение параметра шаблона 2", …). Каждый параметр шаблона заключается в двойные кавычки. При необходимости указания в тексте параметра символа двойной кавычки следует использовать две двойные кавычки.
● Функция СтрСодержит(ГдеИщем, ЧтоИщем). Функция предназначена для поиска вхождения строки ЧтоИщем в строке ГдеИщем. Возвращает Истина в случае, если вхождение обнаружено и Ложь – в противном случае.
● Оператор + для конкатенации строк.
Для удобства редактирования текста шаблона на закладке Шаблоны ограничений в форме роли нужно нажать кнопку Установить текст шаблона. В открывшемся диалоге ввести текст шаблона и нажать кнопку ОК.
Система «1С:Предприятие» выполняет проверку синтаксиса текстов шаблонов, проверку синтаксиса использования шаблонов и макроподстановку текстов шаблонов ограничения доступа роли в текст запроса.
Макроподстановка шаблона заключается:
● в замене вхождений параметров в тексте шаблона на значения параметров из выражения использования шаблона в тексте ограничения;
● в замене выражения использования шаблона в тексте запроса на получившийся текст шаблона.
При вызове конструктора запроса для условия, содержащего шаблоны ограничения доступа, выдается предупреждение о замене всех шаблонов.
Далее приведены примеры шаблонов ограничений:
|
Имя шаблона |
Шаблон |
|
Тело шаблона |
Итого = #Параметр(1) |
|
Использование |
Где #Шаблон("10") |
|
Результат |
Где Итого = 10 |
|
Имя шаблона |
Шаблон1(ВидДокумента) |
|
Тело шаблона |
ВидДокумента = #ВидДокумента |
|
Использование |
Где #Шаблон1(""Накладная"") |
|
Результат |
Где ВидДокумента = "Накладная" |
|
Имя шаблона |
Шаблон2 |
|
Тело шаблона |
ВидДокумента = #Параметр(1) ## #Параметр(2) |
|
Использование |
Где #Шаблон2(""Накладная"", "1"") |
|
Результат |
Где ВидДокумента = "Накладная # 1" |
|
Имя шаблона |
Шаблон3 |
|
Тело шаблона |
ВидДокумента = #Параметр(3) |
|
Использование |
Где #Шаблон3("","",""Накладная"") |
|
Результат |
Где ВидДокумента = "Накладная" |
5.5.4.8.8. Общие рекомендации по ограничению прав
Чтобы гибко управлять доступом пользователей к данным в соответствии с функциями при установке ограничений доступа к данным, рекомендуется придерживаться следующих принципов:
● Нужно выбрать совокупность информации (может быть зависимой от текущего пользователя), для которой целесообразна предварительная подготовка. Выбранная информация должна, с одной стороны, максимально упростить ограничения доступа к данным, а с другой стороны, не должна иметь слишком большой объем. Распределить ее по параметрам сеанса.
● Установить значения параметров сеанса в обработчике УстановкаПараметровСеанса() модуля сеанса.
● Задать ограничения доступа к тем данным, для которых это оправданно (данные являются секретными или наиболее важными для сохранения целостности системы). Необходимо иметь в виду, что установка ограничения доступа может привести к замедлению любого обращения к этим данным. Излишняя сложность ограничений также может привести к замедлению.
● При необходимости обеспечить выполнение некоторого ограниченного количества операций над данными со стороны пользователя, которому полный доступ к этим данным давать нецелесообразно, вынести эти действия в привилегированные модули или явно включать и выключать привилегированный режим в соответствующих местах программного кода (см. здесь).
● Доступ к данным при различных проверках, выполняемых системой при записи объектов, выполняется в привилегированном режиме (см. здесь). Это позволяет не отключать ограничения в правах на уровне записей для соответствующих полей, если работа конфигурации с этими данными планируется только в управляемом режиме:
● для справочников при проверке родителя, владельца и уникальности кода;
● для документов, бизнес-процессов и задач при проверке уникальности номера;
● для планов обмена отключена при проверке уникальности кода;
● для планов счетов и планов видов характеристик при проверке родителя и уникальности кода.
При создании запроса ограничения к данным следует помнить о некоторых ограничениях и особенностях:
● Если для объектной таблицы заданы ограничения доступа к данным и в запросе к данным используется объединение с такой таблицей, то в условии соединения (секция запроса ПО) не допускается использование табличной части объекта с заданным ограничением доступа.
● Если в запросе указана таблица, у которой в запросе не используется ни одного поля, то на эту таблицу накладываются все ограничения доступа к данным. Например, запрос ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Контрагенты будет исполнен с учетом всех ограничений доступа, заданными для справочника Тест. Ограничения накладываются «по ИЛИ». Это значит, что будут доступны все записи, доступные хотя бы по одному условию. Если для каких-то полей не задано условий, то запрос будет выполнен для всех записей таблицы.
Если в запросе используется таблица верхнего уровня, то ограничения, заданные для колонок вложенных таблиц, не накладываются.
Если в запросе используется вложенная таблица, то накладываются ограничения как для вложенной таблицы, так и для таблицы верхнего уровня. Например, запрос ВЫБРАТЬ КОЛИЧЕСТВО(*) ИЗ Справочник.Контрагенты.Договора будет исполнен с учетом всех ограничений для справочника Контрагенты, а также с учетом ограничений, относящихся к табличной части Договора.
● Если доступ к полям, необходимым для получения представления ссылочного объекта метаданных, запрещен с помощью ограничений доступа к данным или доступ к объекту запрещен на уровне прав доступа, то получение представления такого объекта не влияет на ход текущей транзакции.
5.5.4.8.9. Конструктор ограничения доступа к данным
Для вызова конструктора в табличном поле Ограничения доступа к данным в колонке Ограничение доступа нужно перейти в режим редактирования и нажать кнопку выбора, а в открывшейся форме нажать кнопку Конструктор запроса….
На экран выводится форма конструктора:

Рис. 84. Закладка «Таблицы и поля» конструктора ограничений
С его помощью производится формирование условий для установки ограничения доступа к данным.
На закладке Таблицы и поля следует выбрать нужные объекты в списке База данных и перенести их в список Таблицы. Если указано несколько таблиц, то в форме конструктора добавляется закладка Связи.

Рис. 85. Закладка «Связи» конструктора ограничений
На закладке Связи формируются условия, которые накладываются на связи между полями таблиц. Для ввода нового условия нужно нажать кнопку Добавить и в колонке Таблица1 выбрать одну из таблиц. В колонке Таблица2 выбрать таблицу, поля которой связаны с полями первой. Ниже списка условий расположены элементы управления, с помощью которых формируется условие связи таблиц.
Если выбран простой тип условия, то в Поле1 и Поле2 выбираются связанные поля указанных таблиц и задается условие сравнения. Если выбраны поля, сравнение которых не производится, то в строке списка условий в колонке Условие связи выводится текст: Неверно заполненное условие.
На закладке Условия, если требуется, нужно указать условия, по которым будет выполняться отбор исходных данных.

Рис. 86. Закладка «Условия» конструктора ограничений
По каждому выбранному полю необходимо выбрать вид условия и указать наименование параметра. В качестве параметра допускается использование параметра сеанса. Разрешается указывать несколько условий. В этом случае в колонке Условие табличного поля условий текст условия выводится в несколько строк.
В любой момент создания запроса текст запроса можно просмотреть, нажав кнопку Запрос.
5.5.4.8.10. Групповое редактирование ограничений прав доступа и шаблонов
Режим группового редактирования ограничений прав доступа и шаблонов вызывается командой Все ограничения доступа контекстного меню ветки Роли. В открывшейся форме присутствуют две закладки: Ограничения доступа и Шаблоны ограничений.

Рис. 87. Все ограничения прав доступа и шаблоны
На закладке Ограничения доступа можно просматривать все введенные ограничения доступа в общем списке (по всем ролям, объектам, правам, комбинациям полей).
Существует возможность добавлять ограничение доступа сразу для нескольких ролей, объектов, прав и комбинаций ролей.
Можно фильтровать список по различным критериям.

Рис. 88. Отбор ограничений доступа
Режим группового редактирования позволяет удалять выделенные в списке ограничения.
Существует возможность редактировать выделенные ограничения. При этом можно заменять состав полей и/или ограничение доступа.
Режим группового редактирования позволяет также копировать выделенные ограничения в другие роли.
Рис. 89. Копирование ограничений
На закладке Шаблоны ограничений можно видеть все шаблоны ограничения доступа, присутствующие в прикладном решении, при этом из собственно текста шаблона в таблице отображаются только первые 10 строк, которые завершаются символом "…", если текст шаблона более 10 строк. В окне редактирования шаблона будет отображаться полный текст шаблона.

Рис. 90. Все шаблоны ограничения доступа
Существует возможность добавлять шаблон ограничения доступа сразу для нескольких ролей.
Имеется возможность отбирать необходимые шаблоны с помощью набора критериев, а также по значению текущей колонки.

Рис. 91. Отбор шаблонов ограничения доступа
При необходимости имеется возможность выполнить копирование одного или нескольких шаблонов в другие роли.

Рис. 92. Копирование шаблонов
Также редактор предоставляет возможность редактировать выделенные шаблоны. При этом можно изменять наименование и сам текст шаблона.
5.5.5. Общие реквизиты
Общий реквизит – это реквизит, добавляемый ко всем или многим объектам конфигурации. Общий реквизит может использоваться в двух сценариях:
● Как общий реквизит, т. е. для упрощения указания реквизита, который присутствует во всех или многих объектах конфигурации, в которых этот реквизит сохраняет свой смысл и тип. В качестве примера такого использования общего реквизита можно привести поле произвольного комментария в документах прикладного решения.
● Как составная часть разделения данных – специального механизма, позволяющего разделить все хранимые данные, а также работу прикладного решения на отдельные части. При этом у общего реквизита включается разделение данных. В качестве примера такого использования можно привести понятие абонента, когда в одной физической информационной базе могут независимо работать различные «владельцы» данных, при этом пользователи такого прикладного решения будут считать, что в информационной базе кроме «их» данных нет больше ничего. Подробнее о механизме разделения данных см. здесь.
Для того чтобы создать общий реквизит, необходимо создать объект конфигурации Общий реквизит. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие, далее Общие реквизиты и добавить новый объект.

Рис. 93. Создание общего реквизита
В результате будет создан объект конфигурации Общий реквизит, который можно использовать для включения общего реквизита в необходимые объекты конфигурации.
Режим работы общего реквизита задается с помощью свойства Разделение данных. Если это свойство установлено в значение Не использовать, то созданный объект конфигурации будет использоваться только как реквизит, входящий в состав нескольких (или всех) объектов конфигурации. Если свойство установлено в значение Разделять, общий реквизит будет использоваться в качестве разделителя данных (см. здесь).
Список объектов конфигурации, в состав которых входит общий реквизит, определяется с помощью свойств Состав и Автоиспользование (или соответствующая закладка в окне Дополнительно (см. здесь)).

Рис. 94. Общий реквизит без разделения
Если свойство Автоиспользование установлено в значение Использовать, то созданный общий реквизит будет автоматически добавлен во все существующие объекты конфигурации (для которых возможно использование общих реквизитов), а также будет автоматически добавляться во все вновь создаваемые объекты конфигурации.
В том случае, если свойство Автоиспользование установлено в значение Не использовать, автоматического добавления реквизита происходить не будет, а для выбора объектов, в состав которых необходимо включить общий реквизит, следует воспользоваться свойством Состав.
Этим же свойством следует воспользоваться в том случае, если при автоматическом использовании общего реквизита существуют объекты, в которых общий реквизит добавлять не следует.

Рис. 95. Состав общего реквизита
Окно редактирования состава общего реквизита разделено на две части:
● в верхней части указаны все объекты конфигурации, которые могут входить в состав общего реквизита;
● в нижней части – объекты, настройки которых отличаются от настроек по умолчанию, определяемых значением свойства Автоиспользование общего реквизита:
● если свойство установлено в значение Использовать, то нижняя часть окна содержит список объектов, не входящих в состав общего реквизита;
● если свойство установлено в значение Не использовать, то нижняя часть окна содержит список объектов, входящих в состав общего реквизита.
Редактирование можно осуществлять как в верхней, так и в нижней части окна, при этом редактируемый объект конфигурации будет перемещаться между частями окна, в зависимости от значения в колонке Использование.
Для каждого объекта конфигурации колонка Использование может принимать одно из трех значений:
● Автоматически – означает, что назначение объекта конфигурации общему реквизиту зависит от значения свойства Автоиспользование общего реквизита:
● Использовать означает, что объект конфигурации входит в состав общего реквизита;
● Не использовать означает, что объект конфигурации не входит в состав общего реквизита.
● Использовать – означает, что объект конфигурации входит в состав общего реквизита вне зависимости от значения свойства Автоиспользование.
● Не использовать – означает, что объект конфигурации не входит в состав общего реквизита вне зависимости от значения свойства Автоиспользование.
Таким образом, с помощью редактора свойства Состав можно, например, выборочно исключать некоторые объекты из состава общего реквизита, несмотря на то, что для него установлено автоиспользование.
В состав общего реквизита (не находящегося в режиме разделения данных) могут входить следующие объекты конфигурации:
● справочники,
● документы,
● журналы документов,
● планы видов характеристик,
● планы счетов,
● планы видов расчета,
● бизнес-процессы,
● задачи,
● регистры сведений,
● регистры накопления,
● регистры бухгалтерского учета,
● регистры расчета,
● планы обмена,
● внешние источники данных.
При записи документа общему реквизиту журнала присваивается значение общего реквизита документа или значение NULL, если документ не входит в состав общего реквизита.
Общий реквизит может использоваться в ограничениях доступа к данным (см. здесь). Включать внешние источники данных в состав общего реквизита имеет смысл в том случае, когда общий реквизит является разделителем (см. здесь). С особенностями использования внешнего источника данных, входящего в состав разделителя, можно ознакомиться в соответствующем разделе (см. здесь).
Общий реквизит может быть составного типа.
СОВЕТ. Не следует использовать общие реквизиты для описания данных, которые являются частью бизнес-логики конкретных объектов.
Общие реквизиты отображаются в редакторе формы при редактировании форм объектов, входящих в состав общего реквизита, и могут быть размещены на форме.
5.5.6. Планы обмена
План обмена используется для реализации механизмов обмена данными. План обмена:
● содержит информацию об узлах, которые могут участвовать в обмене данными;
● определяет состав данных, которыми будет производиться обмен;
● указывает, следует ли задействовать механизм распределенной информационной базы при обмене.
В одном прикладном решении может существовать несколько планов обмена, каждый из которых может описывать свой порядок обмена данными. Например, если выполняется обмен данными с удаленными складами и удаленными офисами, то, скорее всего, будут существовать два плана обмена (один – для обмена со складами, другой – для офисов), поскольку состав данных, которыми производится обмен со складами, будет значительно «уже», чем состав данных, предназначенных для обмена с офисами.
Описание механизмов обмена данными см. здесь.
5.5.7. Критерии отбора
Критерии отбора – одна из составляющих механизма отбора информации. С их помощью специалист, осуществляющий конфигурирование системы, создает предопределенные правила отбора. В режиме 1С:Предприятие по этим правилам будет выполняться отбор информации в списках.
В окне редактирования объекта Критерий отбора нужно указать имя, синоним и комментарий.
Тип критерия отбора может быть любым из стандартных типов или определенных как объекты дерева конфигурации. Допускается включение реквизитов с составным типом, заданным как СправочникСсылка, ДокументСсылка и т. д., а также реквизитов с составным типом, определенным планом видов характеристик (Характеристика…).
При создании типа критерия отбора следует указать те типы, по которым требуется производить отбор. На закладке Состав по этому типу будет сформирован состав объектов конфигурации, содержащих данные, тип которых входит в тип критерия отбора. В списке требуется установить отметку для тех реквизитов, по которым будет производиться данный отбор.
Чтобы критерий отбора выполнял свои функции, в конфигураторе для него должен быть создан список (закладка Состав), состоящий из реквизитов справочников и документов. На состав списка не накладывается практически никаких ограничений: например, в отличие от графы журнала, для критерия отбора можно выбрать несколько реквизитов одного документа и реквизитов табличной части документа.
Критериев отбора может быть произвольное число, а каждый критерий может иметь несколько форм представления результатов отбора. Этот механизм полезен в случае поиска различной информации. Например, требуется отобрать все документы, в которых используется (в реквизитах и табличных частях) определенный контрагент. При этом можно учитывать и другие условия отбора информации (например, поиск ведется только среди проведенных документов или в определенном интервале дат и т. д.).
Примечание. При открытии формы отбора следует передавать в нее параметр Отбор с установленным значением отбора (элемент Значение). Подробнее о параметрах формы см. здесь.
Критерий отбора может иметь произвольное число форм для визуального представления результатов отбора. Для оперативности получения информации по отбору вызов формы можно разместить в пользовательском меню или на панели инструментов.
Если форм критерия отбора несколько, то в свойстве Основная форма указывается та форма, которая будет вызываться по умолчанию.
Если в конфигурации определено несколько подсистем, нужно выбрать ту, к которой относится данный критерий отбора. Можно указать несколько различных подсистем.
Для вызова формы критерия отбора система размещает соответствующую команду в панели навигации формы.
5.5.8. Подписки на события
Подписки на события позволяют назначать обработчики событий для одного объекта или группы объектов встроенного языка.
При добавлении новой подписки на событие, кроме общих свойств объектов конфигурации, следует указать источник события, само событие, обработчик которого назначается, и процедуру, являющуюся обработчиком этого события.
Источниками событий могут являться прикладные объекты, наборы записей регистров, менеджеры объектов конфигурации. Допускается как множественный выбор объектов, являющихся поставщиками событий, так и выбор всех объектов одного типа (например, все документы).
Выбор события осуществляется из выпадающего списка, причем список содержит те события, которые присутствуют во всех выбранных объектах. Если таких событий нет, список будет пуст.
Выбор обработчика события выполняется в окне, содержащем процедуры, которые могут быть назначены в качестве обработчика события. Такие процедуры должны удовлетворять следующим требованиям:
● процедура должна быть расположена в общем модуле;
● у общего модуля, в котором расположена процедура, должны быть заданы следующие свойства:
● флажок Глобальный снят;
● флажок Клиент (обычное приложение) установлен;
● флажок Клиент (управляемое приложение) снят;
● флажок Сервер установлен;
● флажок Внешнее соединение установлен.
● количество параметров процедуры должно быть на единицу больше, чем количество параметров, которое имеет обработчик выбранного события (т. к. дополнительно к параметрам, передаваемым в обработчик события, передается еще и объект-источник данного события).
При наступлении указанного события выполняется следующая последовательность действий:
● сначала отрабатывается событие в самом объекте и вызывается обработчик события, определенный в модуле объекта или набора записей;
● если в процессе выполнения обработчика параметр Отказ установлен в значение Истина или вызвано исключение, действие прерывается;
● затем в произвольном порядке вызываются внешние обработчики, назначенные для данного события;
● если в процессе выполнения назначенного обработчика параметр Отказ установлен в значение Истина или вызвано исключение, действие прерывается.
В качестве источника в назначенный обработчик передается сам объект (набор записей), вызвавший событие.
Назначенные обработчики событий вызываются в том же контексте, что и действие, вызвавшее событие. Если выполнение назначенного обработчика нужно перенести на сервер, следует вызывать в коде обработчика процедуру общего модуля, исполняемую на сервере.
Назначение обработчиков событий доступно также и средствами встроенного языка. Для этого используются операторы ДобавитьОбработчик и УдалитьОбработчик.
У объектов, которые могут являться источниками событий, есть свойство ДополнительныеСвойства типа Структура, позволяющее хранить информацию между вызовами событий, например, новый или старый это объект.
5.5.9. Регламентные задания
5.5.9.1. Основные возможности механизма заданий
Основными возможностями механизма заданий являются:
● определение регламентных процедур на этапе программирования системы;
● выполнение заданных действий по расписанию;
● выполнение вызова заданной процедуры или функции асинхронно, т. е. без ожидания ее завершения;
● мониторинг хода выполнения заданий;
● управление заданиями (отмена, блокировка выполнения и др.);
● возможность ожидания завершения одного или нескольких заданий.
5.5.9.2. Фоновые задания
Механизм фоновых заданий реализуется средствами встроенного языка. Фоновые задания предназначены для выполнения прикладных задач асинхронно. Они могут порождать дочерние фоновые задания, например, для распараллеливания сложных вычислений по различным рабочим серверам кластера в клиент-серверном варианте работы.
Существует возможность ограничить выполнение фоновых заданий, имеющих одинаковые методы, по определенному прикладному признаку. Программное создание и управление фоновыми заданиями возможны из любого соединения пользователя с информационной базой системы «1С:Предприятие». Фоновое задание выполняется от имени пользователя, который его создал.
5.5.9.3. Регламентные задания
Регламентные задания представляют собой неотъемлемую часть конкретного прикладного решения и описываются на этапе конфигурирования.

Рис. 96. Расписание фоновых заданий
Для каждого регламентного задания может быть задано расписание, в соответствии с которым регламентное задание будет автоматически запущено на исполнение. В системе «1С:Предприятие» поддерживаются однократные и периодические расписания. Можно задать дату начала и окончания выполнения, дневное, недельное и месячные расписания. Расписание можно задать как на этапе конфигурирования, так и на этапе выполнения (в режиме 1С:Предприятие).
В процессе запуска регламентное задание порождает фоновое задание, которое и выполняет реальную обработку. Регламентное задание может выполняться от имени заданного пользователя и имеет возможность перезапуска (например, в случае непредвиденного завершения работы).
В утилите администрирования клиент-серверного варианта работы автоматическое выполнение регламентных заданий может быть запрещено для конкретной информационной базы.
5.5.9.4. Особенности выполнения регламентных заданий
В клиент-серверном варианте работы запуск регламентных заданий по расписанию осуществляет менеджер кластера. Таким образом, даже если с информационной базой не установлено ни одного клиентского соединения, регламентные задания будут выполняться (при условии, что они не запрещены для конкретной информационной базы).
Особенность выполнения фоновых заданий в файловом и клиент-серверном вариантах см. здесь.
5.5.10. Функциональные опции и параметры функциональных опций
5.5.10.1. Назначение
Функциональные опции позволяют разработчику описать возможности прикладного решения, которые можно оперативно включать или выключать на этапе внедрения и/или в процессе работы системы. Например, возможность работы с дополнительными свойствами товаров можно выделить в отдельную функциональную опцию. Тогда если отключить эту возможность, в интерфейсе прикладного решения «пропадут» все связанные (с дополнительными свойствами товаров) возможности.
Система способна автоматически учитывать состояние сделанных настроек – скрывать выключенные возможности, делая интерфейс приложения более ясным и понятным для пользователя.
При разработке возникают ситуации, когда значение функциональной опции должно зависеть от неких параметров, например, валютный учет ведется не у всех организаций. Для реализации такой зависимости служат Параметры функциональных опций – объекты, параметризующие функциональные опции.
5.5.10.2. На что влияют функциональные опции
5.5.10.2.1. Общая информация
Функциональные опции могут оказывать влияние:
● На пользовательский интерфейс – при выключении каких-либо функциональных опций система скрывает в пользовательском интерфейсе все элементы, относящиеся к ней. При этом затрагиваются следующие элементы интерфейса:
● глобальный командный интерфейс;
● реквизиты формы (в том числе колонки реквизита формы типа ТаблицаЗначений или ДеревоЗначений);
● команды формы;
● отчеты, реализованные с помощью системы компоновки данных.
Внимание! Если клиентское приложение работает с файловым вариантом информационной базы через веб-сервер, то изменение функциональной опции приведет к изменению пользовательского интерфейса только после перезапуска веб-сервера (перезапуск клиентского приложения не вызовет изменение пользовательского интерфейса).
● На алгоритмы, написанные на встроенном языке – имеется возможность получать значения функциональных опций из встроенного языка и использовать их в различных условиях, например, для уменьшения объема вычислений.
ВНИМАНИЕ! Функциональные опции и их параметры не влияют на состав базы данных. Все таблицы и поля присутствуют в базе данных независимо от состояния функциональных опций.
5.5.10.2.2. Глобальный командный интерфейс
Влияние функциональных опций на глобальный командный интерфейс заключается в том, что система скрывает команды всех объектов, относящихся к выключенным опциям. Например, если значение функциональной опции Закупки равно значению Ложь, то будут скрыты команды открытия раздела Закупки, создания документа ПриходТовара, открытия списка ПриходТовара и т. д.
В свою очередь, опция Закупки может учитывать значение параметра функциональной опции, например, Организация. Изменяя с помощью методов встроенного языка значение этого параметра, можно изменять состояние функциональной опции, а, следовательно, и видимость элемента интерфейса.
Также следует учитывать следующие особенности формирования командного интерфейса:
● Команда будет исключена из командного интерфейса в том случае, если реквизит, являющийся параметром команды, отключен функциональной опцией.
● Команда будет исключена из командного интерфейса в том случае, если тип параметра команды отключен функциональной опцией. Если тип параметра команды составной, то команда становится недоступной тогда, когда отключаются все типы параметра.
5.5.10.2.3. Форма
В форме функциональные опции могут влиять на реквизиты и команды формы и (как следствие) изменять видимость связанных с ними элементов формы (поля и колонки – для реквизитов формы, кнопки – для команд формы). При разработке формы необходимо учитывать следующие особенности поведения системы:
● Основной реквизит управляемой формы типа <Вид>Объект (СправочникОбъект, ДокументОбъект и т. д.) будет отключен в том случае, если функциональной опцией отключен соответствующий объект конфигурации. Анализируются только те функциональные опции, которые не имеют параметров.
● Основной реквизит управляемой формы типа ДинамическийСписок будет отключен в том случае, если функциональной опцией отключен объект конфигурации, который указан в качестве основной таблицы динамического списка. Анализируются только те функциональные опции, которые не имеют параметров.
● Отключается реквизит формы ссылочного типа, если объект конфигурации, образующий этот тип, отключен функциональной опцией. Реквизит формы составного типа отключается в том случае, если функциональные опции отключают все составляющие типы.
● Отключается реквизит формы типа <Вид>Объект (включая основной реквизит формы), если объект конфигурации, образующий этот тип, отключен функциональной опцией. Анализируются только те функциональные опции, которые не имеют параметров.
● Таблица формы будет отключена, если она отображает данные реквизита формы, отключенного функциональной опцией.
● В диалоге выбора типов (например, для полей ввода, связанных с реквизитами составного типа) отсутствуют типы, если объекты конфигурации, формирующие эти типы, отключены функциональной опцией. Информация о типах, отключенных функциональными опциями, кешируется на стороне клиента и очищается через 20 минут или во время вызова метода ОбновитьИнтерфейс().
ВНИМАНИЕ! В отличие от командного интерфейса, значения параметров функциональных опций устанавливаются только для конкретного экземпляра формы.
5.5.10.2.4. Система компоновки данных
Система компоновки данных в основном используется для построения отчетов. Функциональные опции влияют на состав данных, которые выводятся в отчет, и на состав настроек отчета, доступных пользователю. Например, если выключена функциональная опция Валютный учет, то в отчете, выводящем реестр документов Приход товара, будет отсутствовать колонка Валюта и Валютная сумма, а в настройках будет отсутствовать возможность отбора, группировки, сортировки и т. д. по полю Валюта.
Подробнее о влиянии функциональных опций на доступность полей в отчете, построенном на системе компоновки данных, см. здесь.
5.5.10.2.5. Характеристики
Функциональные опции оказывают влияние на видимость полей формы, которые отображают значение характеристики объекта. Для этого необходимо включить в состав функциональной опции реквизит, хранящий значение характеристики.
Рассмотрим пример. Характеристики используются для справочника Товары, виды характеристик хранятся в плане видов характеристик Характеристики, а значения – в качестве ресурса регистра сведений ЗначенияХарактеристик. Ресурс входит в состав функциональной опции УчетХарактеристик.

Рис. 97. Влияние функциональных опций на характеристики
В случае отключения функциональной опции УчетХарактеристик в формах отключается видимость полей (колонка Значение и поле Значение), отображающих значения характеристик, как показано на рис.97.
5.5.10.3. Общая схема работы
Механизм функциональных опций включает в себя два типа объектов метаданных: Функциональная опция и Параметры функциональных опций.
Функциональная опция представляет собой объект метаданных, который может непосредственно влиять на состав интерфейса приложения (если функциональная опция хранит свое значение в реквизите типа Булево). С помощью объектов этого типа можно скрыть элементы, которые относятся к недоступной функциональности. Например, опция Валютный учет может скрыть справочник Валюты, поле Валюта из документов, колонку Валютная сумма из отчетов. Источником значения функциональной опции является объект метаданных, выбранный в качестве свойства Хранение, например, это может быть константа.
В случае хранения значения функциональной опции в реквизите справочника или ресурсе регистра сведений требуется дополнительная информация, которая указывает на то, как именно выбрать значение опции. Для этой цели предусмотрен отдельный объект метаданных – Параметры функциональных опций.
Можно сказать, что параметры функциональных опций являются осями координат пространства значений функциональных опций. Причем один параметр функциональных опций может определять значение «своей» оси координат одновременно для множества функциональных опций.

Рис. 98. Параметризуемая функциональная опция
Рассмотрим пример: допустим, суммовой учет зависит от склада, принадлежащего конкретной организации (см. рис.98). В нашей информационной базе можно вести учет от имени разных организаций и на разных складах.
Для хранения значений функциональных опций создадим регистр сведений, где измерениями (осями координат) будут:
● Организация (соответствующего типа);
● Склад (соответствующего типа).
Ресурсом регистра сведений будет значение функциональной опции суммового учета.
Тогда общая структура конфигурации будет выглядеть следующим образом:
● Регистр сведений СуммовойУчет:
● измерение Организация;
● измерение Склад;
● ресурс СуммовойУчет, имеющий тип Булево.
● Параметр функциональных опций Организация. Свойство Использование указывает на измерение Организация регистра сведений СуммовойУчет.
● Параметр функциональных опций Склад. Свойство Использование указывает на измерение Склад регистра сведений СуммовойУчет.
● Функциональная опция СуммовойУчет. Свойство Хранение указывает на ресурс СуммовойУчет регистра сведений СуммовойУчет.
В результате для того, чтобы определить необходимость ведения суммового учета, нам необходимо в каждом конкретном случае указать значения параметров функциональных опций (Организация и Склад) и получить значение функциональной опции.
Так, в примере, показанном на рис.98, для Организации 1 и Склада 1 суммовой учет разрешен, а для Организации 2 и Склада 1 суммовой учет запрещен.
5.5.10.4. Взаимодействие с другими объектами
Функциональные опции могут быть назначены следующим объектам конфигурации:
● Подсистемы,
● Общие команды,
● Общие формы,
● Константы,
● Критерии отбора,
● Справочник,
● Документ,
● Журнал,
● План счетов,
● План видов характеристик,
● План видов расчета,
● Бизнес-процесс,
● Задача,
● Планы обмена,
● Отчет,
● Обработка,
● Регистр накопления,
● Регистр сведений,
● Регистр бухгалтерии,
● Регистр расчета,
● Команда,
● Реквизит объекта метаданных,
● Табличная часть,
● Реквизит табличной части,
● Признак учета,
● Признак учета субконто,
● Реквизиты адресации,
● Измерение регистра,
● Ресурс регистра.
Также функциональные опции могут влиять на видимость элементов формы.
5.5.10.5. Создание
5.5.10.5.1. Создание функциональной опции
Для того чтобы создать функциональную опцию, необходимо создать объект конфигурации Функциональная опция. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие, далее Функциональные опции и добавить новый объект.

Рис. 99. Создание функциональной опции
В результате будет создан объект конфигурации Функциональная опция, который можно использовать для назначения функциональных опций другим объектам метаданных.

Рис. 100. Хранение значения функциональной опции
Кроме имени объект имеет обязательное для заполнения свойство – Хранение. В редакторе для него можно выбрать один из объектов, который будет являться источником значения опции. В список доступных объектов входят:
● константы,
● реквизиты справочников,
● ресурсы регистров сведений.
Ограничение на тип источника значения опции нет, но для управления интерфейсом пригодны только те функциональные опции, которые хранят свои значения в реквизитах, имеющих тип Булево. Значения функциональных опций с другими типами доступны только для анализа на встроенном языке.
Свойство Привилегированный режим при получении отвечает за способ получения (и кеширования) значения функциональной опции.

Рис. 101. Привилегированный режим при получении значения функциональной опции
Если данное свойство установлено, то значение функциональной опции получается в привилегированном режиме. Полученное значение кешируется для всех сеансов, связанных с данной информационной базой.
Если свойство Привилегированный режим при получении сброшено, то получение значения функциональной опции выполняется в обычном режиме. Кеширование выполняется для текущего сеанса. Кешируется как значение (если его удалось получить), так и признак невозможности получения значения (в том случае, если значение получить не удалось).
Кеш сбрасывается при изменении значений параметров сеанса.
Совет. Рекомендуется устанавливать свойство Привилегированный режим при получении для всех случаев, когда значение функциональной опции не содержит конфиденциальную информацию.
5.5.10.5.2. Создание параметра функциональных опций
Для того чтобы создать параметр функциональной опции, необходимо создать объект конфигурации Параметры функциональных опций. Это можно сделать в режиме Конфигуратор обычным способом, то есть в окне конфигурации следует выбрать пункт Общие, далее Параметры функциональных опций и добавить новый объект.
Кроме имени, параметр имеет обязательное свойство Использование. В нем указывается набор объектов, значения которых будут определять то, как следует выбирать значение функциональной опции. В список доступных объектов входят справочники и измерения регистра сведений. Для каждого параметра функциональных опций в данном списке можно выбрать один справочник (из всего перечня справочников) и по одному измерению каждого регистра сведений.
ВНИМАНИЕ! Нельзя использовать один и тот же объект метаданных в нескольких параметрах функциональных опций.
5.5.10.6. Использование
5.5.10.6.1. Назначение объектам метаданных
Объект метаданных (например, справочник) можно отнести к одной или нескольким функциональным опциям. Для этого служит свойство Функциональные опции, которое содержит ссылки на созданные в конфигурации функциональные опции.

Рис. 102. Назначение функциональной опции объекту
Список доступных опций ограничен только теми опциями, для которых в свойстве Хранение назначен объект с типом значения Булево.
ВНИМАНИЕ! Если объекту не назначена ни одна функциональная опция, то он считается видимым всегда. В противном случае объект считается видимым, если хотя бы одна из назначенных ему функциональных опций является включенной (т. е. функциональные опции сочетаются «по ИЛИ»).
5.5.10.6.2. Назначение реквизитам и командам формы
Объекты, принадлежащие форме (Реквизиты и Команды), также можно задействовать в механизме функциональных опций.

Рис. 103. Назначение функциональной опции команде
Сделать это можно в редакторе формы, установив свойство Функциональные опции для требуемого объекта.
Состояние функциональных опций будет влиять на отображение объектов формы точно так же, как это происходит в случае объектов метаданных. Например, в случае с командой, отключенной с помощью функциональной опции, будут убраны все связанные с ней кнопки.
Если реквизиту формы или команде не назначена ни одна функциональная опция, то реквизит формы или команда считается видимой всегда. В противном случае реквизит формы или команда считается видимой, если хотя бы одна из назначенных ему функциональных опций является включенной.
5.5.10.6.3. Использование в механизме ограничения доступа к данным
В условиях механизма ограничения доступа к данным (см. здесь) Функциональные опции могут использоваться точно так же, как и Параметры сеанса (см. здесь). Допустимо использовать только не зависящие от параметров опции, то есть те, которые привязаны к константам.
5.5.10.6.4. Определение значения функциональной опции
Значение функциональной опции определяется объектом, который указан в свойстве Хранение. В случае константы используется ее значение. Для опции, связанной с реквизитом справочника или ресурсом регистра сведений, – значения, хранящиеся в этих объектах. Для того чтобы найти конкретный объект, который хранит значение функциональной опции, необходима дополнительная информация – набор значений параметров функциональных опций.
Если опция хранится в реквизите справочника, параметр должен содержать ссылку на конкретный элемент справочника. Если опция хранится в ресурсе регистра сведений, должны быть указаны значения всех измерений регистра. В этом случае каждое измерение должно характеризоваться своим параметром.
Если для функциональной опции, имеющей тип Булево, заданы не все параметры, то выполняется сложение «по ИЛИ» всех значений с незаданными параметрами. Например, если функциональная опция хранится в регистре сведений с измерениями Организация и Склад и задано только измерение Организация, то значение функциональной опции будет равно Истина, если хотя бы у одного из складов, перечисленных в измерении Склад, значение функциональной опции будет равно значению Истина.
Для функциональной опции, имеющий тип, отличный от Булево, ситуация с не полностью заданными параметрами приводит к генерации исключения.
Методы встроенного языка позволяют получить значение опции, как в зависимости от переданных параметров, так и для параметров, установленных для командного интерфейса или конкретной формы. В том случае, когда изменение значения объекта, указанного в свойстве функциональной опции Хранение, выполняется в транзакции, собственно значение функциональной опции будет изменено только после завершения транзакции. Пока открыта транзакция – значение функциональной опции будет равно значению, актуальному на момент начала транзакции.
Если функциональная опция привязана к ресурсу периодического регистра сведений, то система использует срез последних для получения значения опции. Если требуется получать значение опции на какую-либо другую дату, необходимо указать значение для параметра функциональных опций Период (Period), имеющий тип Дата, который будет использоваться как дата получения среза. Этот параметр не нужно создавать в метаданных. Он предоставляется системой автоматически.
При использовании параметризованных функциональных опций следует учитывать следующие особенности поведения:
● В формах списков колонка реквизита, связанного с параметризованной функциональной опцией, будет отображаться, если в информационной базе хранится хотя бы одно включенное значение данной функциональной опции.
● Если необходимо, чтобы при открытии формы реквизиты, связанные с функциональными опциями, были отключены по умолчанию, то нужно установить значения этих параметров в значения, отсутствующие в информационной базе (для справочников – пустая ссылка, для регистров сведений – значения измерений, для которых нет записей). В этом случае функциональная опция будет иметь значение Ложь.
● В том случае, когда в качестве параметра указана ссылка на группу (если типа параметра функциональной опции допускает создание групп), а не ссылка на элемент, поведение системы будет следующим:
● если реквизит, в котором хранится значение функциональной опции, используется как для элемента, так и для группы, то значение функциональной опции будет определяться значением этого реквизита.
● если реквизит, в котором хранится значение функциональной опции, не используется для группы, то при получении значения функциональной опции c помощью методов ПолучитьФункциональнуюОпцию(), ПолучитьФункциональнуюОпциюФормы() и ПолучитьФункциональнуюОпциюИнтерфейса() будет возращено значение NULL. Если, параметризованная таким значением, функциональная опция оказывает влияние на пользовательский интерфейс, то система будет воспринимать ее как выключенную (функциональная опция будет иметь значение Ложь).
● Для командообразующих объектов метаданных возможно установить привязку к параметризованной функциональной опции. В командном интерфейсе команды таких объектов будут отображаться только в том случае, если есть хотя бы одна комбинация параметров функциональных опций, при которых значение функциональной опции равно Истина. Однако с помощью метода УстановитьПараметрыФункциональныхОпцийИнтерфейса() можно задать конкретные значения параметров функциональных опций, и тогда видимость команд будет определяться именно заданными параметрами.
● Динамический список автоматически использует функциональные опции, используемые формой. Если реквизиты, которые используются в запросе динамического списка, будут отключены при заданной комбинации параметров функциональных опций, данные по ним не будут выбраны и отображены в динамическом списке, а реквизит будет удален из списков доступных реквизитов в диалоге настройки отображения данных динамического списка (в режиме 1С:Предприятие).
5.5.10.7. Работа с функциональными опциями во встроенном языке
Методы глобального контекста ПолучитьФункциональнуюОпцию() и ПолучитьФункциональнуюОпциюИнтерфейса() возвращают значение функциональной опции. Разница между ними заключается в том, что первый метод позволяет указать набор параметров функциональных опций, а второй – возвращает значение функциональной опции исходя из параметров, заданных для командного интерфейса. В форме есть свой метод, который возвращает значение опции для параметров, указанных в рамках формы, – ПолучитьФункциональнуюОпциюФормы().
Для обновления глобального командного интерфейса следует явным образом вызывать метод УстановитьПараметрыФункциональныхОпцийИнтерфейса(). Командный интерфейс будет обновлен с учетом нового состояния функциональных опций.
Примечание. Если значение функциональной опции изменяется в базе данных, то автоматического обновления глобального командного интерфейса и открытых в это время форм не происходит. Для этого следует использовать метод ОбновитьИнтерфейс() после записи значений функциональных опций в базу данных.
Следует помнить, что установка параметров функциональных опций (и выполнение метода ОбновитьИнтерфейс()) приводит к следующим последствиям:
● для каждой формы вызывается закрытие всех вспомогательных форм (с вызовом соответствующих обработчиков);
● формы, отказавшиеся от закрытия, не закрываются;
● происходит обновление состава элементов основной формы;
● если на момент обновления интерфейса активной формой была основная, происходит отображение основной формы в соответствии с новым составом элементов;
● если на момент обновления интерфейса активной формой была вспомогательная форма, то:
● будет выполнена команда открытия вспомогательной формы, если после обновления интерфейса она является доступной;
● в противном случае обновляется состав элементов основной формы и выполняется ее отображение;
● если на момент обновления интерфейса активной формой была вспомогательная форма, открытая с помощью команды, не относящейся к панели навигации формы, то вместо этой формы будет обновлен состав элементов основной формы и выполнено ее отображение.
Для того чтобы обновить конкретную форму, следует либо заново открыть ее, либо вызвать метод УстановитьПараметрыФункциональныхОпцийФормы(), при этом вышеописанная последовательность действий отрабатывает только для той формы, в контексте которой вызвана установка параметров функциональных опций формы.
Параметры не обязательно указывать все сразу, можно изменить значение конкретного параметра или набора параметров выборочно. Но эффективнее осуществляется именно групповая установка значений одним вызовом.
Для получения значений параметров необходимо вызвать соответствующую функцию (ПолучитьПараметрыФункциональныхОпцийИнтерфейса() или ПолучитьПараметрыФункциональныхОпцийФормы()), которая вернет установленные параметры в виде структуры, где ключом будет выступать имя параметра.
При открытии форма автоматически использует параметры функциональных опций, установленных для командного интерфейса.
5.5.11. Определяемые типы
Определяемый тип – это специальный объект конфигурации, который предназначен для упрощения и повышения удобства внедрения подсистем при разработке прикладного решения. В качестве примера можно рассмотреть универсальную подсистему, предназначенную для хранения контактной информации. В состав этой подсистемы входит регистр сведений, который хранит эту информацию. В этом регистре есть измерение, которое указывает, для какого объекта хранится контактная информация. В качестве значения измерения может выступать контрагент, собственная организация, физическое лицо и т. д. Причем тип (с именем СправочникиОрганизацийИФизическихЛиц), описывающий этот объект хранения, может встречаться не только в качестве типа измерения регистра. В процессе внедрения прикладного решения состав такого типа может изменяться – в него могут добавляться новые справочники или из его состава могут исключаться «лишние» типы. Если вместо типа СправочникиОрганизацийИФизическихЛиц использовать составной тип в каждом месте, где используется такая сущность, то придется везде изменять состав типов. Это сложно и существует возможность забыть о каком-либо реквизите с нужным составным типом. Если использовать определяемый тип, то в процессе доработки прикладного решения будет необходимо изменить только состав определяемого типа (и, естественно, все фрагменты прикладного кода, где этот тип используется). Все реквизиты, для которых в качестве типа указан тип СправочникиОрганизацийИФизическихЛиц, будут изменены автоматически.
Определяемый тип обладает следующими особенностями:
● Может быть составным;
● Не может входить в состав типа значения плана видов характеристик;
● Не может входить в состав составного типа данных другого реквизита;
● Определяемый тип не может входить в состав другого определяемого типа;
● Определяемый тип не может входить в состав типа следующих объектов:
● Признак учета плана счетов;
● Признак учета субконто плана счетов;
● Тип номера нумератора.
В состав определяемого типа могут входить следующие типы:
● Ссылочные типы: СправочникСсылка, ДокументСсылка, ПеречислениеСсылка, ПланВидовХарактеристикСсылка, ПланСчетовСсылка, ПланВидовРасчетаСсылка, БизнесПроцессСсылка, ТочкаМаршрутаБизнесПроцессаСсылка, ЗадачаСсылка, ПланОбменаСсылка, ВнешнийИсточникДанныхКубТаблицаИзмеренияСсылка;
● Объектные типы: СправочникОбъект, ДокументОбъект, ПланВидовХарактеристикОбъект, ПланСчетовОбъект, ПланВидовРасчетаОбъект, ОтчетОбъект, ОбработкаОбъект, БизнесПроцессОбъект, ЗадачаОбъект, ПланОбменаОбъект;
● Наборы записей и связанные типы: РегистрСведенийНаборЗаписей, РегистрНакопленияНаборЗаписей, РегистБухгалтерииНаборЗаписей, РегистРасчетаНаборЗаписей, ПерерасчетНаборЗаписей, ВнешнийИсточникДанныхКубНаборЗаписей, ПоследовательностьНаборЗаписей, ВнешнийИсточникДанныхКубМенеджерЗаписи, ВнешнийИсточникДанныхКубТаблицаИзмеренияОбъект;
● Менеджеры объектов: СправочникМенеджер, ДокументМенеджер, ПеречислениеМенеджер, ПланВидовХарактеристикМенеджер, ПланСчетовМенеджер, ПланВидовРасчетаМенеджер, ОтчетМенеджер, ОбработкаМенеджер, БизнесПроцессМенеджер, ЗадачаМенеджер, ПланОбменаМенеджер, ЖурналДокументовМенеджер, РегистрСведенийМенеджер, РегистрНакопленийМенеджер, РегистБухгалтерииМенеджер, РегистРасчетаМенеджер, КонстантаМенеджерЗначения, КритерийОтбораМенеджер, ВнешнийИсточникДанныхТаблицаМенеджер, ВнешнийИсточникДанныхКубМенеджер, ХранилищеНастроекМенеджер, ВнешнийИсточникДанныхКубТаблицаИзмеренийМенеджер, ПоследовательностьМенеджер;
● Системные перечисления: ВидДвиженияНакопления, ВидСчета, ВидДвиженияБухгалтерии, ГоризонтальноеПоложение, ВертикальноеПоложение, РежимИзмененияРазмера, ВидДанныхАнализа, МетодКластеризации, ТипЕдиницыИнтервалаВремениАнализаДанных, ТипЗаполненияТаблицыРезультатаАнализаДанных, ТипИспользованияЧисловыхЗначенийАнализаДанных, ТипИсточникаДанныхПоискаАссоциаций, ТипКолонкиАнализаДанныхДеревоРешений, ТипКолонкиАнализаДанныхКластеризация, ТипКолонкиАнализаДанныхОбщаяСтатистика, ТипКолонкиАнализаДанныхПоискАссоциации, ТипКолонкиАнализаДанныхПоискаПоследовательностей, ТипКолонкиМоделиПрогноза, ТипКерыРасстоянияАнализаДанных, ТипОтсеченияПравилАссоциации, ТипСтандартизацииАнализаДанных, ТипУпрощенияДереваРешений, ТипУпорядочиванияПравилАссоциацииАнализаДанных, ТипУпорядочиванияШаблоновПоследовательностейАнализаДанных;
● Прочие типы: Произвольный, Число, Строка, Дата, Булево, ХранилищеЗначения, УникальныйИдентификатор, ДинамическийСписок, ТаблицаЗначений, ДеревоЗначений, СписокЗначений, ФорматированнаяСтрока, ДвоичныеДанные, ТабличныйДокумент, ФорматированныйДокумент, ТекстовыйДокумент, NULL, ФиксированныйМассив, ФиксированноеСоответствие, ФиксированнаяСтруктура, КомпоновщикНастроекКомпоновкиДанных, ГрафическаяСхема, ГеографическаяСхема, Диаграмма, ДиаграммаГанта, Дендрограмма, ОписаниеТипов, Картинка, Цвет, Шрифт, СтандартнаяДатаНачала, СтандартныйПериод;
При выполнении проверки конфигурации или при проверке перед обновлением конфигурации базы данных проверяется, что состав определяемого типа допустим в каждом конкретном месте использования. Так, один и тот же определяемый тип может быть использован в качестве типа одного объекта конфигурации и не может – для другого.
Для описания типа на встроенном языке следует использовать конструкцию вида ОпределяемыйТип.<ИмяОпределяемогоТипа>.
Примечание. Если требуется использовать прикладное решение с младшими версиями системы «1С:Предприятие» (младше версии 8.3.3), то следует удалить из конфигурации все определяемые типы.
5.5.12. Хранилища настроек
Для сохранения информации о настройках пользователя, которые должны сохраняться между сеансами работы, в платформе реализованы хранилища настроек.
Существует два вида хранилищ настроек:
● Стандартное хранилище – хранилище, используемое системой по умолчанию и хранящее данные в системных таблицах информационной базы.
● Хранилища настроек – специальные объекты метаданных, которые описывают хранение данных в некотором объекте информационной базы. Например, в этом объекте может быть описана работа с настройками, которые хранятся в справочнике.
Платформа использует следующие хранилища:
● Системное хранилище – в данное хранилище система сохраняет все возможные настройки, которые нужны для работы платформы. К данным настройкам относятся настройки размеров форм, настройки печати табличного документа и т. п. Полный перечень настроек, сохраняемых в системном хранилище, см. здесь. В качестве системного хранилища настроек всегда используется стандартное хранилище настроек. То есть данные системного хранилища всегда сохраняются в системной таблице информационной базы.
● Хранилище общих настроек – данное хранилище предназначено для хранения различных настроек прикладного решения. Платформа самостоятельно не записывает в данное хранилище никаких настроек. Данное хранилище должен использовать разработчик из встроенного языка, для того чтобы выполнять сохранение/восстановление прикладных настроек пользователя.
● Хранилище пользовательских настроек отчетов – в данное хранилище помещаются пользовательские настройки отчетов.
● Хранилище вариантов отчетов – в данное хранилище помещаются варианты отчетов.
● Хранилище настроек данных форм – в это хранилище сохраняются данные форм. Этим хранилищем можно пользоваться, например, для сохранения реквизитов обработок. При этом можно выбрать индивидуальное хранилище для каждого отчета и обработки.
● Хранилище пользовательских настроек динамического списка – в это хранилище сохраняются пользовательские настройки динамического списка.
При разработке конфигурации имеется возможность определить собственные хранилища настроек для всех хранилищ, кроме системного хранилища. Для этого необходимо создать объект хранилища настроек в соответствующей ветке дерева метаданных и затем указать его в нужном свойстве конфигурации. Свойства объекта Конфигурация имеют те же имена, что и вышеперечисленные хранилища.
Данные хранилищ могут храниться как в системной таблице информационной базы, так и в некотором специальном объекте информационной базы, например, в справочнике или регистре сведений. Например, можно создать в конфигурации объект хранилища настроек и указать в свойстве конфигурации, что данное хранилище следует использовать для хранения настроек отчетов. Таким образом, настройки отчетов будут сохраняться не в системной таблице, а в некотором объекте, например, в справочнике, что дает возможность организовать работу с едиными настройками отчетов, реализовать систему прав, обмен настройками и т. п.
Создавать собственное хранилище имеет смысл в тех случаях, когда необходима особая структура хранения настроек, необходимы специальные механизмы управления настройками, требуется обмен настройками в рамках распределенной базы данных (см. здесь) и других аналогичных случаях.
Примечание. Для хранения настроек рекомендуется выбирать такие объекты, для которых системой поддерживается способ идентификации, при котором идентифицирующий реквизит можно преобразовать в строку и обратно без потери данных. В качестве примера можно привести справочник и стандартный реквизит Код, уникальный во всем справочнике.
5.5.12.1. Общие принципы работы хранилища настроек
Объект метаданных ХранилищеНастроек предназначен для обеспечения хранения прикладных настроек конфигурации. За счет реализации обработчиков событий и создания форм объекта выполняется модификация механизма работы с настройками таким образом, что изменяется место хранения настроек (вместо системных таблиц используются объекты конфигурации, которые создал разработчик) и визуальные механизмы работы с настройками.
В конфигурации может быть определено произвольное количество хранилищ настроек.
Хранилище настроек может использоваться как только для программной работы, так и для программной и интерактивной работы. В первом случае для обеспечения необходимой функциональности требуется обязательная реализация обработчиком модуля объекта ХранилищеНастроек:
● ОбработкаСохранения – содержит реализацию метода Сохранить(). В данном обработчике необходимо выполнить сохранение настройки в некоторый объект. Например, в элемент справочника.
● ОбработкаЗагрузки – содержит реализацию метода Загрузить(). В данном обработчике необходимо получить настройки из некоторого объекта. Например, из элемента справочника.
ВНИМАНИЕ! Если не реализовать тот или иной обработчик, то будет недоступно выполнение действия, которое обработчик реализует. Например, если не реализовать обработчик ОбработкаСохранения, будет недоступно сохранение настроек.
В процессе разработки хранилища разработчик самостоятельно определяет, каким образом будет идентифицироваться объект хранилища, тем самым определяя тип параметра. Например, если настройки сохраняются в справочнике, то в качестве ключа настройки можно использовать поле Код или значение Ссылка (элемента справочника).
Если для работы с настройками требуется интерактивность (формы сохранения и восстановления настроек), то необходимо реализовать формы сохранения и восстановления настроек и заполнить соответствующие свойства объекта ХранилищеНастроек (Основная форма сохранения и Основная форма загрузки).
ВНИМАНИЕ! Реализация форм сохранения и восстановления настроек является обязательной для выполнения интерактивных операций. Программное сохранение и восстановление настроек возможно и без реализации этих форм.
Когда пользователь применяет команды сохранения или загрузки настроек, система получает соответствующую форму объекта хранилища настроек и отображает ее на экране. Например, при сохранении настроек отчета система будет использовать форму сохранения того объекта метаданных, который указан в качестве хранилища настроек отчетов (непосредственно у самого отчета или у всей конфигурации). При этом форме будут переданы параметры, более подробную информацию о которых можно получить в описании объекта ОписаниеНастроек в синтакс-помощнике.
При создании формы с помощью конструктора необходимые параметры будут автоматически добавлены в список параметров формы.
В формах следует использовать переданные параметры и соответствующим образом фильтровать список настроек. Так, следует отображать только настройки для указанного в параметре КлючОбъекта объекта настройки (например, отчета).
Если пользователь выбрал настройку, то результатом работы формы должно быть значение типа ВыборНастроек. В этом значении, в свойстве КлючНастроек, должен находиться ключ выбранной настройки (например, код элемента справочника или другой, идентифицирующий настройку параметр), а в свойстве ДополнительныеСвойства – дополнительная информация, которую пользователь мог указать в форме:
Копировать в буфер обменаЗакрыть(Новый ВыборНастроек(КлючСохраняемойНастройки));
Внимание! Не поддерживается сохранение настройки в стандартном хранилище настроек, если длина ключа объекта превышает 256 символов; длина ключа настроек превышает 128 символов; длина имени пользователя превышает 64 символа.
5.5.12.2. Создание объекта метаданных
Для создания Хранилища настроек следует создать одноименный объект конфигурации. Это можно сделать в ветке Общие, пункт Хранилища настроек.

Рис. 104. Создание хранилища настроек
5.5.12.3. Стандартное хранилище настроек
Стандартное хранилище настроек представляется во встроенном языке объектом СтандартноеХранилищеНастроекМенеджер. Данный объект реализует тот же набор методов, что и объект ХранилищеНастроекМенеджер, и дополнительно реализует методы:
● ПолучитьСписок() – метод получения списка настроек для выбранного объекта настройки;
● Удалить() – удаление определенной настройки выбранного объекта настройки.
Стандартное хранилище сохраняет настройки в системных таблицах информационной базы.
В качестве ключа объекта настройки и в качестве ключа настройки системное хранилище настроек принимает строку.
В качестве настроек системное хранилище принимает любое значение, которое может быть помещено в хранилище значений.
Примечание. При использовании методов Сохранить(), Удалить() и УстановитьОписание() объекта СтандартноеХранилищеНастроекМенеджер следует учитывать, что если объект, к которому относятся настройки (например, форма), в текущем сеансе уже использовался, то изменения произойдут только в следующем сеансе.
Совет. При существенном программном изменении настроек (например, при копировании настроек от одного пользователя другому) рекомендуется предложить пользователю выполнить перезапуск клиентского приложения.
5.5.12.4. Сохранение настроек форм
Разработчик может управлять сохранением данных форм в настройках. Для этого при разработке формы ему необходимо воспользоваться следующими свойствами формы:
● Сохранение данных формы в настройках – при помощи данного свойства разработчик формы может включить возможность сохранения данных формы (с возможностью выбора настройки, в которую будут сохраняться данные). Если у формы включена необходимость сохранения, то форма предоставляет команды сохранения/загрузки настроек.
● Автоматическое сохранение данных в настройках – указывает необходимость автоматического сохранения настроек при закрытии формы и восстановлении при открытии формы. При этом не важно, используется или нет список настроек.
Если для формы установлена возможность сохранения данных, то необходимо указать, какие реквизиты формы должны сохраняться (колонка Сохранение на закладке Реквизиты редактора формы).
При сохранении настроек в качестве ключа объекта используется полное имя формы. В настройках сохраняется объект типа Соответствие, в котором в качестве ключей находятся пути к сохраняемым реквизитам, а в качестве значений – их (реквизитов) значения.
5.5.12.5. Сохранение настроек отчетов
У объектов Отчет и Внешний отчет имеются свойства метаданных Хранилище вариантов и Хранилище настроек. В данных свойствах указывается, в какие хранилища нужно сохранять варианты и настройки отчета соответственно. Если хранилища не указаны, то используются хранилища, указанные в свойствах конфигурации. Если в свойствах конфигурации также не указаны конкретные объекты ХранилищеНастроек, то используется системное хранилище.
Форма отчета предоставляет команды сохранения и загрузки вариантов и настроек отчетов.
При необходимости сохранять в настройках компоновки данных или пользовательских настройках компоновки данных некоторую дополнительную информацию можно воспользоваться свойствами ДополнительныеСвойства объектов НастройкиКомпоновкиДанных и ПользовательскиеНастройкиКомпоновкиДанных. Свойство ДополнительныеСвойства представляет собой объект типа Структура.
5.5.12.6. Сохранение настроек динамических списков
Пользовательские настройки динамических списков сохраняются в хранилище, которое указано в свойствах конфигурации (ХранилищеПользовательскихНастроекДинамическихСписков). Если в свойствах конфигурации не указано хранилище настроек, то используется системное хранилище.
Возможностью автоматического сохранения пользовательских настроек динамического списка управляет свойство Автоматическое сохранение пользовательских настроек реквизита формы типа ДинамическийСписок. Когда свойство установлено в значение Истина, пользовательские настройки автоматически сохраняются при закрытии формы и загружаются при ее открытии.
Форма динамического списка предоставляет команды сохранения и загрузки пользовательских настроек. Также динамический список предоставляет команду для установки стандартных настроек. В случае выполнения данной команды в динамический список попадут настройки, которые находятся в свойстве Список.КомпоновщикНастроек.Настройки.
Для динамического списка возможен вызов события ПриОбновленииСоставаПользовательскихНастроекНаСервере в следующих случаях:
● При открытии формы динамического списка;
● После завершения редактирования пользовательских настроек, если изменился состав настроек.
5.5.12.7. Порядок разработки хранилища настроек
Далее приводится рекомендованный порядок разработки хранилищ настроек:
1. Определяется, какое хранилище (см. начало раздела) будет использоваться. Например, будет реализовано хранилище настроек данных форм конфигурации.
2. Определяется перечень объектов метаданных, которые будут использовать это хранилище, и определяется перечень хранимой в хранилище информации, ее структура и типы. Эта информация поможет нам правильно выбрать объект метаданных, в данных которого будут храниться наши настройки.
3. На основании информации из п. 2 создается объект (и его структура), который будет хранить настройки. Пусть наши настройки хранятся в элементах справочника. Так как в нашем случае структура сохраняемых данных крайне разнородна, то нет смысла реализовывать отдельный набор реквизитов для хранения настроек каждой формы. Поэтому настройки будут храниться в реквизите справочника типа ХранилищеЗначения.
4. Создается объект типа ХранилищеНастроек, и для него выполняется реализация форм сохранения и загрузки. Тем самым обеспечивается интерактивность при сохранении и восстановлении настроек.
5. Для созданного объекта ХранилищеНастроек выполняется реализация обработчиков событий, связанных с сохранением и восстановлением настроек. Если не выполнить эту операцию, то не будут происходить собственно операции чтения/записи настроек. Для решения этой задачи нужно реализовать обработчики событий ОбработкаСохранения и ОбработкаЗагрузки в модуле созданного объекта типа ХранилищеНастроек.
6. В объектах, выделенных в п. 2 (или в свойствах конфигурации), заполняются соответствующие свойства, тем самым указывая объектам, в каких хранилищах будут храниться настройки. В нашем примере необходимо заполнить свойство конфигурации Хранилище настроек данных форм ссылкой на объект, созданный на шаге 4.
7. При необходимости выполняется реализация обработчиков событий, связанных с сохранением и восстановлением настроек в тех прикладных объектах, где это необходимо.
5.5.12.8. Работа с хранилищем настроек из встроенного языка
В данном примере рассматривается копирование настроек текущего пользователя другим пользователям системы. В качестве источника настроек используется ХранилищеСистемныхНастроек.
Примечание. Пример, приведенный ниже, не является законченным. Он предназначен для демонстрации работы с стандартным хранилищем настроек.
Список имен пользователей передается параметром процедуры СкопироватьНастройки() в виде массива.
Копировать в буфер обменаПроцедура СкопироватьНастройки(СписокПользователей) ОписаниеНастроек = Новый ОписаниеНастроек; ВыборкаНастроек = ХранилищеСистемныхНастроек.Выбрать(); Пока ВыборкаНастроек.Следующий() Цикл Для каждого Пользователь Из СписокПользователей Цикл ОписаниеНастроек.Представление = ВыборкаНастроек.Представление; ХранилищеНастроек.Сохранить(ВыборкаНастроек.КлючОбъекта, ВыборкаНастроек.КлючНастроек, ВыборкаНастроек.Настройки, ОписаниеНастроек, Пользователь); КонецЦикла; КонецЦикла; КонецПроцедуры
5.5.13. Общие формы
Механизм общих форм позволяет использовать формы, доступные из любого модуля текущей конфигурации. Подробно о порядке работы с редактором форм см. здесь.
Если необходимо разместить команду открытия общей формы в командном интерфейсе, то сделать это можно с помощью свойства Использовать стандартные команды. Команда открытия общей формы будет размещена в командном интерфейсе тех подсистем, которым принадлежит общая форма. Если общая форма входит в состав функциональной опции и функциональная опция отключена, то стандартная команда общей формы не отображается в командном интерфейсе.
Если создается общая форма, которая будет использоваться в качестве формы отчета, настроек отчета или варианта, то не рекомендуется для такой формы устанавливать свойство Использовать стандартные команды.
5.5.14. Общие команды
В данной ветке разработчик может создавать команды, не имеющие объектной специфики или служащие для выполнения действий с объектами, которые не используют стандартные команды.
Описание командного интерфейса см. здесь. Описание команд см. здесь.
5.5.15. Группы команд
В данной ветке разработчик может создавать собственные группы команд. Созданная группа будет размещаться в той части командного интерфейса, который определен свойством команды Категория. Группа команд может быть размещена:
● в панели навигации,
● панели навигации формы,
● панели действий,
● командной панели формы.
Описание командного интерфейса см. здесь. Описание команд см. здесь.
5.5.16. Общие макеты
Механизм общих макетов (печатных форм, форм отчетов, справочных данных и т. д.) позволяет создавать шаблоны печатных форм, доступные из любого модуля текущей конфигурации.
Подробно о порядке работы с редактором табличных документов см. здесь.
5.5.17. Общие картинки
Конфигуратор позволяет включать в конфигурацию графические изображения – картинки. Картинки можно размещать в некоторых элементах управления, в формах, в макетах, а также обращаться к ним при помощи встроенного языка системы «1С:Предприятие».
Если картинку планируется использовать в качестве пиктограммы в меню, панели инструментов, табличном документе и т. п., важно задать ей правильный размер, чтобы она отображалась без искажений.
Рекомендуемый размер картинок:
● для пиктограмм – не более 16x16 точек;
● для использования в табличном поле – не более 14x14 точек;
● в качестве картинки кнопки выбора поля редактирования – не более 9x9 точек;
● для картинки, которая будет использована в качестве представления подсистемы – не более 48x48 точек.
Совет. Если картинку предполагается использовать в нескольких местах, ее размер разумно ограничить меньшим значением.
Для работы с картинками предназначено окно Библиотека картинок. Для его вызова в окне Конфигурация нужно указать ветвь Общие картинки и в контекстном меню выбрать пункт Все картинки.
На экран выводится окно ведения списка картинок (см. рис.105).

Рис. 105. Библиотека картинок
Для добавления новой картинки следует нажать кнопку Добавить. На экран выводится окно, в котором можно выбрать картинку из файла или открыть редактор картинок и создать новую картинку, а также выбрать или изменить для картинки прозрачный фон. Для выбора готовой картинки нужно нажать кнопку Выбрать из файла и выбрать файл, в котором расположена подготовленная заранее картинка или их набор (см. здесь). Система «1С:Предприятие» позволяет использовать картинки форматов bmp, gif, jpg, png, tiff, ico, метафайлы (wmf, emf) или наборы картинок в zip-архиве (см. здесь). Для картинок формата gif поддерживаются расширения NETSCAPE2.0 и ANIMEXTS1.0. Другие расширения не поддерживаются и поведение системы в этом случае не определено.
Совет. Для картинок, которые будут использоваться в качестве пиктограмм в интерфейсе (см. рекомендованные размеры картинок в начале раздела), рекомендуется использовать форматы, поддерживающие сжатие без потерь (png и gif), для того чтобы избежать искажения и минимизировать трафик между клиентом и сервером.
Нужно задать имя, по которому данная картинка будет выбираться средствами встроенного языка.

Рис. 106. Свойства картинки
Чтобы картинка при вставке хорошо вписывалась в элемент управления или форму, желательно установить ей прозрачный фон. Для этого в качестве цвета фона при редактировании картинки достаточно выбрать любой не используемый в картинке цвет, сформировать изображение и сохранить картинку. Для существующей картинки можно указать любой цвет. Благодаря установленной прозрачности данного цвета сквозь него становятся видны детали той части формы, которую закрывает область картинки.
Для установки прозрачного фона нужно нажать кнопку Установить прозрачный фон. Указатель мыши изменит вид. Подвести курсор к той части картинки, цвет которой нужно сделать прозрачным, и щелкнуть левой кнопкой мыши. Выбранный цвет становится прозрачным.
Для снятия прозрачности следует нажать кнопку Убрать прозрачность.
Кнопки Установить прозрачный фон и Убрать прозрачность доступны только для картинок форматов bmp, jpg и tiff. Для картинок в остальных форматах данные кнопки недоступны.
Подобные действия можно выполнить с помощью ссылки Открыть в свойстве Картинка. На экран выводится окно выбора картинки.

Рис. 107. Выбор картинки
Для редактирования картинки нужно нажать кнопку Редактировать. Запускается редактор картинок (подробнее см. здесь).
Кнопки Включить набор вариантов и Выключить набор вариантов позволяют работать с картинками, предназначенными (в основном) для мобильных конфигураций и состоящие из набора картинок. Подробнее про такие картинки см. здесь. Нажатие кнопки Выключить набор вариантов приводит к тому, что из набора картинок удаляются все картинки, кроме базовой картинки (картинки для разрешения ldpi). Если в наборе нет картинки для разрешения ldpi, то набор становится пустым. Если в наборе есть картинка для разрешения ldpi, и она установлена как контурная, то признак шаблонности сбрасывается. Нажатие кнопки Включить набор вариантов приводит к тому, что текущая картинка становится базовой картинкой (для разрешения ldpi). При необходимости отредактировать одну из картинок в наборе, следует нажать кнопку Редактировать. В этом случае будет открыт диалог, в котором надо выбрать одну из картинок набора, которую необходимо редактировать.

Рис. 108. Редактирование набора картинок
Если картинка для какого-либо разрешения не задана, поле ввода, соответствующее картинке, будет отображать пустым (как для картинки Средняя (mdpi) на рис.108). Нажатие кнопки …, в соответствующем поле диалога редактирования набора картинок, приведет к открытию диалога выбора картинки (рис.107). Нажатие кнопки X приведет к очистке соответствующей картинки диалога. Редактирование отдельной картинки набора не отличается от редактирования отдельной картинки.
5.5.18. XDTO-пакеты
Механизм XDTO является универсальным способом представления данных для взаимодействия с различными внешними источниками данных и программными системами. Подробнее об использовании механизма XDTO см. здесь.
5.5.18.1. Импорт схемы XML в глобальную фабрику XDTO
Для того чтобы импортировать схему XML из файла .xsd в глобальную фабрику XDTO, следует выделить в дереве конфигурации ветку XDTO и выполнить команду контекстного меню Импорт XML-схемы…

Рис. 109. Импорт XML-схемы
После указания требуемого файла .xsd будет выполнена проверка существования в дереве конфигурации пакетов XDTO, пространства имен которых совпадают с импортируемыми из файла. Если такие пакеты существуют, то будет отображен список этих пакетов и предложено указать те пакеты, которые должны быть обновлены (по умолчанию существующие пакеты не обновляются).

Рис. 110. Выбор пространств имен
После этого будет выполнен импорт, в результате которого новые пакеты XDTO будут добавлены в дерево конфигурации, а пакеты, отмеченные для обновления, обновлены.
5.5.18.2. Экспорт схемы XML-данных конфигурации
Для того чтобы экспортировать схему XML, соответствующую типам данных конфигурации (без учета пакетов XDTO, созданных в дереве конфигурации), в файл .xsd, следует выделить в дереве конфигурации ветку XDTO и выполнить команду контекстного меню Экспорт XML-схемы данных конфигурации…

Рис. 111. Экспорт схемы конфигурации
После выбора каталога и указания имени файла будет выполнен экспорт схемы XML в указанный файл.
5.5.18.3. Экспорт схемы XML-пакета XDTO
Для того чтобы экспортировать схему XML, соответствующую существующему пакету XDTO, в файл .xsd, следует выделить в дереве конфигурации требуемый пакет XDTO и выполнить команду контекстного меню Экспорт XML-схемы…

Рис. 112. Экспорт XML-схемы пакета XDTO
После этого будет выполнена проверка выгружаемого пакета XDTO. Если будут обнаружены ошибки, соответствующие сообщения будут выведены в окно сообщений, а процедура экспорта будет прервана.
В случае успешной проверки будет предложено выбрать каталог и имя файла .xsd, после чего схема XML будет экспортирована в указанный файл.
5.5.18.4. Проверка пакета XDTO
Для того чтобы проверить пакет XDTO, следует выделить в дереве конфигурации требуемый пакет XDTO и выполнить команду контекстного меню Проверить пакет.
В результате будет выполнена проверка модели пакета XDTO (описание правил проверки см. здесь).
Если будут обнаружены ошибки, соответствующие сообщения будут выведены в окно сообщений.
5.5.18.5. Окно редактирования пакета XDTO
Редактирование пакета XDTO выполняется в окне редактирования пакета XDTO.

Рис. 113. Окно редактирования пакета XDTO
При добавлении нового пакета XDTO в дерево конфигурации окно редактирования пакета XDTO открывается автоматически.
Для того чтобы открыть окно редактирования для существующего пакета XDTO, следует выделить в дереве конфигурации требуемый пакет XDTO и выполнить команду контекстного меню Открыть пакет.
5.5.18.5.1. Иерархическая структура пакета XDTO
Окно редактирования пакета XDTO содержит иерархическую структуру пакета XDTO, отображенную в виде дерева.
В корне дерева расположен идентификатор пакета XDTO, содержащий URI пространства имен данного пакета.
На первом уровне иерархии могут располагаться следующие элементы пакета:
● Директивы импорта – перечень директив импорта. Каждая директива импорта представляет собой ссылку на другой пакет, содержащий типы, на которые так или иначе ссылается данный пакет. При работе с данным пакетом XDTO средствами встроенного языка данный перечень директив импорта будет доступен в виде объекта КоллекцияПакетовXDTO, содержащегося в свойстве Зависимости пакета XDTO.
● Типы значений – перечень типов значений XDTO, которые содержит пакет XDTO.
● Типы объектов – перечень типов объектов XDTO, которые содержит пакет XDTO.
● Свойства – перечень свойств пакета XDTO. Представляет собой объявления объектов/значений, которые могут являться корневыми элементами документов XML, принадлежащих URI пространству имен данного пакета XDTO.
● Каждый тип значения XDTO описывается иерархической структурой и может содержать в своем составе следующие элементы:
● Образец – описывает один фасет XDTO типа Образец.
● Перечисление – описывает один фасет XDTO типа Перечисление.
Каждый тип объекта XDTO описывается иерархической структурой, которая может содержать в своем составе набор свойств объекта.
5.5.18.5.2. Свойства пакета XDTO
Редактирование свойств пакета XDTO выполняется в палитре свойств.
Если палитра свойств открыта для пакета XDTO, выделенного в дереве конфигурации, то в ней будут содержаться следующие свойства: Имя, Синоним, Комментарий и URI пространства имен. Кроме этого, палитра свойств будет содержать ссылку Пакет, по которой можно перейти в окно редактирования пакета XDTO.

Рис. 114. Свойства пакета XDTO
Если палитра свойств открыта для пакета XDTO, выделенного в окне редактирования пакета XDTO (корневой элемент), то она содержит единственное свойство – URI пространства имен. Это свойство задает URI пространства имен пакета XDTO, к которому принадлежат все определенные в этом пакете типы.
5.5.18.5.3. Свойства директивы импорта
Редактирование свойств директивы импорта выполняется в палитре свойств. Для директивы импорта палитра свойств содержит единственное свойство – Пространство имен. Это свойство задает URI пространства имен импортируемого пакета.

Рис. 115. Свойства директивы импорта
5.5.18.5.4. Свойства типа значения XDTO
Редактирование свойств типа значения XDTO выполняется в палитре свойств.

Рис. 116. Свойства значения XDTO
Для типа значения XDTO палитра свойств содержит следующие свойства:
● Имя – имя типа значения XDTO.
● Базовый тип – базовый тип для данного типа значения XDTO.
● Вариант – вариант простого типа (атомарный тип, список, объединение). Если значение установлено, то должно не противоречить значениям Тип элемента и Типы объединения.
● Тип элемента – тип элемента списка в случае, когда тип значения XDTO определяется списком. При этом все фасеты и свойство Типы подчиненных должны быть пустыми.
● Типы объединения – список типов, образующих объединение в случае, когда тип значения XDTO определяется объединением. Объединяться могут только типы значений XDTO. При этом все фасеты и свойство Тип элемента должны быть пустыми.
● Длина – фасет длины.
● Минимальная длина – фасет минимальной длины.
● Максимальная длина – фасет максимальной длины.
● Пробельные символы – фасет пробельного символа.
● Минимум, включающий границу – фасет минимума, включающего границу.
● Минимум, не включающий границу – фасет минимума, не включающего границу.
● Максимум, включающий границу – фасет максимума, включающего границу.
● Максимум, не включающий границу – фасет максимума, не включающего границу.
● Общее количество цифр – фасет общего количества цифр.
● Количество цифр дробной части – фасет количества цифр дробной части.
5.5.18.5.5. Свойства типа объекта XDTO
Редактирование свойств типа объекта XDTO выполняется в палитре свойств.

Рис. 117. Свойства объекта XDTO
Для типа объекта XDTO палитра свойств содержит следующие свойства:
● Имя – имя типа объекта XDTO.
● Базовый тип – базовый тип для данного типа объекта XDTO. Это может быть только тип объекта XDTO.
● Открытый – признак, является ли тип объекта XDTO открытым. Данное свойство показывает, может ли экземпляр объекта XDTO содержать дополнительные свойства, не определенные в его типе.
● Абстрактный – признак, является ли тип объекта XDTO абстрактным.
● Смешанный – свойство показывает, имеет ли соответствующий объект XDTO смешанное содержание. Если значение свойства Смешанный равно Истина, то значение Последовательный обязательно равно Истина, так как смешанное содержание невозможно смоделировать без применения последовательности XDTO.
● Упорядоченный – признак, является ли порядок следования элементов, представляющих значения свойств, строго соответствующим порядку следования свойств в типе объекта XDTO. Если свойство Упорядоченный имеет значение Ложь, то на входе порядок следования элементов XML не контролируется, а на выходе определяется порядком следования свойств, если только свойство Последовательный не имеет значение Истина.
● Последовательный – это свойство показывает, содержит ли экземпляр соответствующего объекта XDTO последовательность XDTO. Данный признак равен значению Истина в тех случаях, когда порядок следования вложенных элементов XML не может однозначно определяться порядком следования свойств в типе или соответствующий объект XDTO имеет смешанное содержание. Последовательность XDTO позволяет задать в явном виде порядок следования элементов, как они будут представлены в документе XML. Для объектов типов, у которых свойство Последовательный установлено в значение Ложь, порядок следования вложенных элементов соответствует порядку следования свойств.
5.5.18.5.6. Свойства свойств типа объекта XDTO
Редактирование свойства свойств типа объекта XDTO выполняется в палитре свойств.

Рис. 118. Палитра свойств типа XDTO
Для типа объекта XDTO палитра свойств содержит следующие свойства:
● Имя – имя свойства. В пределах одного типа объекта XDTO имена свойств должны быть уникальными.
● Тип – тип свойства. Может быть как типом значения XDTO, так и типом объекта XDTO.
● Минимальное количество – минимальное количество значений свойства. Минимальное количество значений свойства может принимать значения >= 0. Естественно, значение Минимальное количество должно быть меньше или равно значению Максимальное количество (если, конечно, Максимальное количество не равно -1);
● Максимальное количество – свойство типа объекта XDTO может быть определено как содержащее одно или множество значений. Свойство считается содержащим одно значение, если свойство Максимальное количество равно 1. Если же свойство Максимальное количество больше 1, то считается, что свойство может содержать множество значений. Такое свойство в структуре объекта моделируется как список. Свойство Максимальное количество показывает максимальное количество значений свойства. Максимальное количество > 1 может быть задано только для свойств, представляемых в виде элемента XML.
● Возможно пустое – показывает, может ли свойство принимать неопределенное значение. Свойство Возможно пустое, равное Истина, может быть определено только для свойств с формой представления Элемент. Если Максимальное количество > 1, неопределенное значение является допустимым для элемента списка значений свойства.
● Фиксированное – указывает, является ли значение свойства фиксированным. Если установлено в значение Истина, то само фиксированное значение можно получить через свойство По умолчанию.
● По умолчанию – значение свойства по умолчанию. Тип значения по умолчанию может быть только типом значения XDTO. При этом данное значение должно быть совместимо с типом свойства (быть того же типа, что и тип свойства или же унаследованного типа). При создании объекта XDTO свойство, если оно допускает единственное значение, принимает значение по умолчанию. Для свойств с множеством значений список значений изначально пуст, независимо от того, определено или нет значение по умолчанию.
● Форма – форма представления свойства в XML. Это может быть Текст, Элемент или Атрибут. Если формой представления является Атрибут или Текст, то значение свойства Максимальное количество не может быть больше 1. Если свойство принимает значение Текст, то значение свойства Минимальное количество также должно быть равным 1. У одного типа только одно свойство может иметь форму представления Текст, при этом остальные свойства должны иметь форму представления Атрибут.
● Локальное имя – локальное имя, используемое для представления свойства. Для свойств с формой представления Текст – пустая строка.
5.5.18.5.7. Глобальное свойство
Редактирование свойств глобального свойства выполняется в палитре свойств.

Рис. 119. Палитра свойств глобального свойства
Для глобального свойства палитра свойств содержит следующие свойства:
● Имя – имя глобального свойства. В пределах одного типа объекта XDTO имена глобальных свойств должны быть уникальными.
● Ссылка – ссылка на корневое определение свойства пакета.
● Тип – тип глобального свойства.
● Минимальное количество – минимальное количество значений свойства. Если Минимальное количество = 0, то значение свойства может быть не установлено.
● Максимальное количество – максимальное количество значений свойства. Если Максимальное количество равно -1, то количество значений свойства неограниченно.
● Возможно пустое – показывает, может ли свойство принимать неопределенное значение.
● Фиксированное – указывает, является ли значение свойства фиксированным.
● По умолчанию – значение свойства по умолчанию. Лексическое представление значения свойства должно соответствовать правилам проверки типа данного свойства.
● Форма – форма представления свойства в XML. Это может быть Текст, Элемент или Атрибут.
● Локальное имя – локальное имя, используемое для представления свойства.
5.5.19. Web-сервисы
Механизм Web-сервисов позволяет использовать «1С:Предприятие» как набор сервисов в сложных распределенных и гетерогенных системах, а также позволяет интегрировать «1С:Предприятие» с другими промышленными системами использованием сервисно-ориентированной архитектуры.
Подробнее об использовании механизма Web-сервисов см. здесь.
5.5.19.1. Добавление Web-сервиса
Для того чтобы добавить Web-сервис в дерево конфигурации, следует выделить ветку Общие – Web-сервисы и выполнить команду контекстного меню Добавить.
В результате выполнения команды будет открыто окно редактирования Web-сервиса (см. здесь).
На закладке Прочее окна редактирования Web-сервиса следует установить следующие параметры:
● URI пространства имен – содержит URI пространства имен Web-сервиса. Каждый Web-сервис может быть однозначно идентифицирован по своему имени и URI пространству имен, которому он принадлежит.
● Пакеты XDTO – перечень пакетов XDTO, типы которых могут использоваться в качестве типов возвращаемого значения операций и типов параметров операций Web-сервиса.
● Имя файла публикаций – имя файла описания Web-сервиса, который расположен на веб-сервере (см. здесь).
Для получения доступа к Web-сервису необходимо использовать адрес, который формируется следующим образом: <Имя хоста веб-сервера>/<Имя виртуального каталога>/ws/<Имя Web-сервиса> или <Имя хоста веб-сервера>/<Имя виртуального каталога>/ws/<Адрес Web-сервиса>.
Так, если виртуальный каталог имеет имя DemoWS, имя Web-сервиса в конфигураторе указано как ДемонстрацияРаботыWS, а в качестве адреса указано DemoWorkWS, то обращение к Web-сервису можно выполнять одновременно по двум адресам (для получения доступа с локальной машины): http://localhost/DemoWS/ws/ДемонстрацияРаботыWS или http://localhost/DemoWS/ws/DemoWorkWS.
Кроме этого, на закладке содержится кнопка Модуль, которая позволяет открыть для редактирования модуль Web-сервиса.
5.5.19.2. Иерархическая структура Web-сервиса
Каждый Web-сервис, описываемый в дереве конфигурации, может содержать набор операций. Каждой операции должна соответствовать экспортируемая процедура, описанная в модуле Web-сервиса.

Рис. 120. Описание Web-сервиса
В свою очередь, каждая операция может содержать набор параметров, имена которых должны соответствовать именам параметров процедуры, описывающей данную операцию.
5.5.19.3. Операции Web-сервиса
На закладке Операции выполняется добавление операции Web-сервиса. Редактирование свойств операции выполняется в палитре свойств.

Рис. 121. Свойство операции Web-сервиса
Тип возвращаемого значения – тип значения, которое возвращает операция Web-сервиса. Может являться типом значения XDTO или типом объекта XDTO.
Возможно пустое значение – показывает, может ли возвращаемое значение принимать неопределенное значение.
В транзакции – показывает, будет ли выполняться код модуля Web-сервиса в транзакции или нет. Если свойство установлено, то при вызове Web-сервиса автоматически будет начата транзакция, а при завершении транзакция будет либо зафиксирована, либо произойдет откат транзакции (в зависимости от результатов выполнения). Если свойство не установлено, при начале исполнения модуля Web-сервиса транзакция начата не будет.
Имя метода – имя процедуры модуля Web-сервиса, которая будет выполнена при вызове данного свойства.
Режим управления блокировкой данных – указывает, какие блокировки будут использовать при доступе к данным (подробнее см. здесь).
5.5.19.4. Параметры операции
На закладке Операции для указанной операции нужно осуществить задание параметров операции Web-сервиса. Редактирование свойств параметра выполняется в палитре свойств.

Рис. 122. Свойства параметра операции
Тип значения – тип значения параметра операции Web-сервиса. Может являться типом значения XDTO или типом объекта XDTO.
Возможно пустое значение – показывает, может ли значение параметра операции принимать неопределенное значение.
Направление передачи – определяет направление передачи данных с помощью данного параметра. Возможные значения:
● Входной – означает, что параметр может использоваться только для передачи данных Web-сервису.
● Выходной – означает, что параметр может использоваться только для получения данных от Web-сервиса.
● Входной – Выходной – означает, что параметр может использоваться как для передачи данных, так и для их получения от Web-сервиса.
5.5.19.5. Указание типов, определяемых системой
Чтобы в Web-сервисе воспользоваться типами, определяемыми системой «1С:Предприятие» (например, в параметрах и возвращаемом значении операций), нужно в конфигурации определить пакеты XDTO и для каждого пакета указать в его списке импортируемых пакетов (свойство Директивы импорта) набор пакетов платформы, в которые эти типы входят. URI пространства имен для указания типа содержится в статье синтакс-помощника по объекту данного типа.
5.5.19.6. Публикация Web-сервисов
Публикация Web-сервисов описывается см. здесь.
5.5.20. HTTP-сервисы
Механизм HTTP-сервисов позволяет использовать «1С:Предприятие» как набор сервисов в сложных распределенных и гетерогенных системах, а также позволяет интегрировать «1С:Предприятие» с другими промышленными системами.
Подробнее об использовании механизма HTTP-сервисов см. здесь.
Описание редактирования HTTP-сервисов см. здесь.
5.5.21. WS-ссылки
Система «1С:Предприятие» может использовать веб-сервисы, предоставляемые другими поставщиками, с помощью статических ссылок, создаваемых в дереве конфигурации.
5.5.21.1. Добавление WS-ссылки
Для того чтобы добавить статическую ссылку на внешний веб-сервис в дерево конфигурации, следует выделить ветку WS-ссылки и выполнить команду контекстного меню Добавить или соответствующую команду меню Действия.

Рис. 123. Добавление WS-ссылки
В открывшемся окне следует ввести URL описания добавляемого веб-сервиса, например: http://users.v8.1c.ru/ws/products.1cws?wsdl.
Примечание. При добавлении WS-ссылки следует помнить, что «1С:Предприятие» удаляет из введенного URL завершающий символ «/», в силу чего URL http://localhost/ws/ws-service/?wsdl и URL http://localhost/ws/ws-service?wsdl с точки зрения «1С:Предприятия» будут считаться идентичными.
5.5.21.2. Иерархическая структура WS-ссылки
Просмотр иерархической структуры WS-ссылки выполняется в окне просмотра WS-ссылки. Значения свойств элементов ссылки можно просмотреть в палитре свойств.
Для того чтобы открыть окно просмотра WS-ссылки, следует выделить в дереве конфигурации требуемую WS-ссылку и выполнить команду контекстного меню Свойства. После этого в палитре свойств воспользоваться ссылкой WS-ссылка, которая открывает окно просмотра WS-ссылки.

Рис. 124. WS-ссылка
Окно просмотра содержит иерархическую структуру WS-ссылки, отображенную в виде дерева.
На первом уровне иерархии могут располагаться:
● Модель данных – содержит перечень пакетов XDTO, описывающих структуру типов, используемую веб-сервисами, на которые ссылается данная WS-ссылка.
● Web-сервисы – перечень Web-сервисов, на которые ссылается данная ссылка.
Просмотр структуры и свойств модели данных выполняется аналогично работе с пакетами XDTO (см. здесь), за исключением того, что редактирование свойств пакетов, отображаемых в окне просмотра WS-ссылки, невозможно.
Просмотр структуры WS-ссылки выполняется аналогично работе с Web-сервисами, за исключением того, что для каждого Web-сервиса отображаются поддерживаемые точки подключения Web-сервиса, для которых, в свою очередь, отображается список операций и параметров каждой операции.

Рис. 125. Структура Web-сервиса
Различные точки подключения Web-сервиса позволяют выполнять операции, используя различные протоколы.
5.5.22. Элементы стиля
Объекты конфигурации Элементы стиля предназначены для единообразного оформления различных элементов формы в тех случаях, когда недостаточно того оформления, которое автоматически предлагает «1С:Предприятие». Например, требуется цвет каких-либо надписей в формах конфигурации сделать одинаковым. В этом случае логично создать элемент стиля, задать ему цвет и использовать созданный элемент для установки цвета текста элемента формы.

Рис. 126. Использование элемента стиля
Элементы стиля могут быть трех разных видов:
● Цвет,
● Шрифт,
● Рамка.
Примечание. Системные элементы стиля недоступны для выбора в качестве значений пользовательских элементов стиля.
В диалоге выбора шрифта в тонком клиенте в списке шрифтов присутствуют шрифты, установленные на текущем компьютере, и перечень специальных шрифтов, заключенных в угловые скобки (<>). Если выбран шрифт <Шрифт текста>, то будет использоваться шрифт интерфейса «1С:Предприятия», остальные шрифты соответствуют соответствующим шрифтам операционной системы. В начале списка размеров шрифта <Шрифт текста> присутствует элемент <>. Выбор этого размера шрифта (его значение равно 0) означает, что будет использован размер шрифта интерфейса «1С:Предприятия». Начертание шрифта (жирный, наклонный и т. д.) по умолчанию берется из стиля, но может быть изменено пользователем без каких-либо ограничений. При выборе другого шрифта внесенные пользователем изменения размера или начертания не сохраняются и устанавливаются в значения по умолчанию.
Имеется возможность программного доступа к значению элемента стиля с помощью свойства Значение.
Пример:
Копировать в буфер обменаМетаданные.ЭлементыСтиля.ЦветОтрицательного.Значение
5.5.23. Языки
Объекты конфигурации Языки предназначены для создания интерфейса программы на различных языках. Для каждого объекта конфигурации типа Языки резервируется отдельная строка для тех реквизитов метаданных, для которых допускается представление на разных языках.
Рассмотрим пример формы для элемента справочника Номенклатура. Для языка Русский надписи формы выглядят так:

Рис. 127. Форма на русском языке
Если в ветви Языки создано несколько объектов (например, Русский и Английский), то для смены языка нужно выбрать пункт Конфигурация – Язык редактирования конфигурации. В открывшемся окне выбора языка выбрать язык просмотра конфигурации.

Рис. 128. Выбор языка редактирования конфигурации
Аналогичный результат можно получить с помощью кнопки выбора языка, расположенной в панели состояния справа от кнопок CAP и NUM (правый нижний угол основного окна конфигуратора).
Конфигуратор заменит текст надписей на варианты надписей выбранного языка.

Рис. 129. Форма на английском языке
Разумеется, текст надписей должен быть заранее введен для каждого элемента управления. Для ввода текста в палитре свойств элемента управления Надпись в свойстве Заголовок (Текст или Синоним, в зависимости от типа элемента управления) нужно нажать кнопку «лупа» (см. рис.130). На экран выводится окно Строки на разных языках.

Рис. 130. Строки на разных языках
Совет. В конфигурации нет ограничений на число языков. Однако не следует создавать объекты типа Языки «с запасом», т. к. создать объект Язык можно в любой момент.
В свойстве Код языка указывается код языка, например, EN для языка Английский.
Если в конфигурации определено два и более объекта типа Языки, то для свойства Синоним и Заголовок элемента управления появляется кнопка редактирования текста на разных языках (в виде лупы).
Первый объект языка программа создает в соответствии с выбором языка (страны) при создании новой информационной базы.
Чтобы сформировать текстовое представление реквизита для отображения в форме, используется следующее правило:
● Выполняется получение заголовка отображаемого объекта на языке конфигурации текущего пользователя. Если заголовок задан, используется именно он.
● Выполняется попытка получения синонима отображаемого объекта на языке конфигурации текущего пользователя. Если синоним задан, используется именно он.
● Дальнейшее зависит от вида отображаемого объекта:
● для стандартных реквизитов получается представление на языке локализации платформы;
● для объектов, созданных прикладным разработчиком, используется имя объекта так (и на том языке), как оно задано в конфигурации.
ВНИМАНИЕ! Если тексты в свойствах Синоним или Заголовок введены, то изменение кода языка в свойстве Код языка приведет к «потере» введенных текстов (тексты остаются для прежнего значения кода). Тексты «восстанавливаются» при указании прежнего значения кода языка.
Для редактирования текстов и выполнения задач локализации (создания интерфейса на другом языке) следует использовать режим Редактирование текстов интерфейса (см. здесь).
В том случае, если предполагается использовать прикладное решение на мобильных устройствах, рекомендуется указывать коды языков в соответствии со стандартом ISO 639 (http://www.iso.org/iso/ru/language_codes). В противном случае при проверке конфигурации будет выдаваться предупреждение.
В коде языка запрещено использование следующих символов: #, *, |, \, :, ", <, >, ?, /.
5.6. Общие свойства объектов конфигурации
Данный раздел содержит описание общих свойств объектов метаданных.
5.6.1. Основные свойства
Практически все объекты конфигурации имеют следующие свойства, располагающиеся в категории свойств Основные:
● Имя – имя объекта конфигурации. Имя должно состоять из одного слова, начинаться с буквы и не содержать специальных символов, кроме «_». По имени объекта производится доступ и управление объектом конфигурации средствами встроенного языка. Имена объектов конфигурации не должны совпадать с зарезервированными словами языка запросов (список зарезервированных слов см. здесь). Длина имени объекта конфигурации не может превышать 80 символов. Конфигурации, созданные в «1С:Предприятии» версии 8.3.6 и младше, могут иметь имена объектов конфигурации длиннее 80 символов, однако, при попытке редактировать такой объект в версии 8.3.7 и выше – имя будет необходимо сократить до 80 символов.
● Синоним – помимо имени можно указать также его синоним. Если конфигурация создается для использования на разных языках, то следует указать синонимы на используемых языках. При работе с системой «1С:Предприятие» синоним будет выдаваться в различных списках выбора, заголовках окон, текстах надписей, при формировании интерфейсов с учетом текущего языка. Синоним не имеет ограничений на использование символов. Если синоним не задан, выбирается имя.
Примечание. Имя или синоним, отображаемые пользователю, также называются представлением объекта конфигурации.
● Комментарий – произвольная строка символов. Как правило, расшифровывает и поясняет имя объекта.
5.6.2. Представление объектов метаданных
Для многих объектов метаданных реализована возможность задавать различные представления объекта. Это сделано для того, чтобы разработчик имел возможность задать представление стандартных команд, их подсказок, а также заголовков форм.

Рис. 131. Представление объектов
● Представление объекта (для регистра – записи):
● название одного объекта (например, Расчетный счет);
● используется в представлении стандартной команды (создание объекта).
● Расширенное представление объекта (для регистра – записи) используется для формирования заголовка формы объекта. Например, Расчетный счет организации.
● Представление списка:
● название списка объектов (например, Расчетные счета);
● используется в представлении стандартной команды (команда открытия списка объектов).
● Расширенное представление списка – используется для формирования заголовка формы списка (например, Расчетные счета организации).
● Расширенное представление – заголовок формы отчета или обработки (например, Отчет о взаиморасчетах по расчетным счетам).
● Пояснение – используется для формирования подсказки к стандартным командам (например, Расчетные счета наших организаций).
● Картинка – картинка для представления подсистемы в панели разделов.
Следует учитывать, что заполнение свойств, связанных с представлением объектов и списков, необходимо только в тех случаях, когда требуется несколько уточнить информацию, отображаемую для объекта по умолчанию.
Например, существует справочник Товары (Имя объекта метаданных – Товары, Синоним объекта метаданных – Товары), элементами которого могут быть товары и услуги. Но в текстах команд вы хотите использовать единственное число для команды (создать товар) и не хотите отражать информацию об услугах, т. к. она «удлиняет» текст команды. В то же время в форме объекта вы хотите указать пользователю, что в данной форме можно редактировать и товары, и услуги. В этом случае имеет смысл свойство Представление объекта заполнить текстом Товар, а свойство Расширенное представление объекта заполнить текстом Товар (услуга). Тогда команда создания элемента справочника товары будет выглядеть как Товар: создать, а заголовок формы – Товар (услуга).
Подробную информацию о том, какие из вышеперечисленных свойств каким объектам метаданных соответствуют см. здесь. Там же можно получить информацию о правилах формирования текстов стандартных команд, подсказок команд и заголовков форм.
5.6.3. Произвольное представление данных
Стандартное представление данных, которое формирует система, может не устраивать пользователя. Например, если с системой работают пользователи, говорящие на разных языках и объекты системы содержат всю необходимую информацию также на разных языках. Например, для товаров существует два названия: на русском и на английском языке. А выводить нужный текст необходимо в зависимости от кода локализации сеанса. Также нужно, чтобы представление на нужном языке генерировалось везде, где формируется представление объекта: динамический список, отчет и т. д.
Для реализации этой задачи существует специальный механизм, позволяющий разработчику определить реквизиты, которые участвуют в формировании представления, а также описать алгоритм, по которому формируется представление объекта.
Данная возможность доступна для следующих объектов конфигурации:
● Планы обмена,
● Справочники,
● Документы,
● Планы видов характеристик,
● Планы счетов,
● Планы видов расчета,
● Бизнес-процессы,
● Задачи,
● Таблицы внешних источников данных.
Механизм формирования представления состоит из двух этапов: определение реквизитов, участвующих в формировании представления и собственно формирование представления.
Для определения списка реквизитов используется обработчик события ОбработкаПолученияПолейПредставления менеджера соответствующего объекта. Обработчик вызывается при первой попытке получения представления выбранного объекта, и результат работы сохраняется на время сеанса. В данном обработчике необходимо заполнить массив Поля именами реквизитов, которые будут участвовать в формировании представления. Если параметр СтандартнаяОбработка в обработчике будет установлено в значение Истина, то после завершения работы обработчика, массив Поля будет очищен и заполнен полями, используемыми для формирования стандартного представления данного объекта. В противном случае система будет использовать только те значения, которые были помещены в массив Поля.
Примечание. Примеры, приведенные ниже, не являются законченным. Они предназначены для демонстрации механизмов работы с произвольным представлением.
Допустим, что в справочнике Товары есть реквизиты РусскоеНаименование, АнглийскоеНаименование и Артикул, которые должны участвовать в формировании представления. В этом случае обработчик получения полей представления (в модуле менеджера справочника Товары) будет выглядеть следующим образом:
Копировать в буфер обменаПроцедура ОбработкаПолученияПолейПредставления(Поля, СтандартнаяОбработка) Поля.Добавить("РусскоеНаименование"); Поля.Добавить("АнглийскоеНаименование"); Поля.Добавить("Артикул"); СтандартнаяОбработка = Ложь; КонецПроцедуры
При необходимости получения представления система вызывает обработчик события ОбработкаПолученияПредставления в менеджере соответствующего объекта. В этот обработчик передаются значения реквизитов, участвующих в формировании представления. Программный код, расположенный в обработчике, выполняет формирование текста представления.
Внимание! Обработчик события ОбработкаПолученияПредставления вызывается при любой необходимости получения представления какого-либо объекта информационной базы. Избыточные данные, или неправильный выбор данных для формирования представления, может привести к существенному замедлению работы системы.
Обработчик ОбработкаПолученияПредставления формирует представление и возвращает его с помощью параметра Представление обработчика. Данные, необходимые для формирования представления, передаются с помощью параметра Данные. Данные представляют из себя структуру, где ключом является имя реквизита, а значением – значение реквизита для текущего объекта. Если параметр СтандартнаяОбработка установить в значение Истина, то система попытается сформировать стандартное представление для текущего объекта, исходя из переданных данных. Если в параметре Данные отсутствуют реквизиты, необходимые для формирования стандартного представления, то представлением будет пустая строка. Если формирование представления выполняется для нового объекта (еще не сохраненного в информационной базе), то в качестве значения поля Ссылка структуры Данные, будет передаваться значение Неопределено.
Рассмотрим пример формирования представления для двуязычного справочника Товары:
Копировать в буфер обменаПроцедура ОбработкаПолученияПредставления(Данные, Представление, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; КодЛокализацииСеанса = ВРег(ТекущийКодЛокализации()); Если Найти(КодЛокализацииСеанса, "RU") <> 0 Тогда Текст = Данные.РусскоеНаименование; ИначеЕсли Найти(КодЛокализацииСеанса, "EN") <> 0 Тогда Текст = Данные.АнглийскоеНаименование; Иначе Текст = Данные.РусскоеНаименование; КонецЕсли; Представление = Текст + "(" + Данные.Артикул + ")"; КонецПроцедуры
Следует помнить, что если в обработчике ОбработкаПолученияПредставления будет совершена ошибка встроенного языка, то возможна ситуация, когда работа приложения будет аварийно завершена.
5.6.4. Стандартные реквизиты
Для того чтобы на уровне конфигурации переопределять некоторые интерфейсные свойства (такие как синоним, проверка заполнения и т. д.) стандартных реквизитов (например, Код, Наименование, Родитель) и стандартных табличных частей (например, ВидыСубконто, БазовыеВидыРасчета) прикладных объектов, существует возможность настройки этих свойств.

Рис. 132. Стандартные реквизиты
Для этого в палитре свойств ряда объектов существуют команды, открывающие списки стандартных реквизитов и стандартных табличных частей (см. рис.132). Такие команды доступны для тех объектов, у которых имеются стандартные реквизиты и стандартные табличные части.
С помощью палитры свойств можно переопределять некоторые свойства стандартных реквизитов таким образом, чтобы они более полно соответствовали требованиям решаемой прикладной задачи. Например, для свойства Владелец справочника РасчетныеСчета можно задать синоним Контрагент. Тогда во всех формах представление этого реквизита (Владелец) по умолчанию будет выглядеть как «Контрагент:».
В том случае если свойства стандартного реквизита (или стандартной табличной части) не заданы, будут использованы свойства стандартных реквизитов по умолчанию.
По своему набору свойств стандартный реквизит практически ничем не отличается от любого другого реквизита, за исключением того, что нельзя изменить:
● имя стандартного реквизита,
● тип стандартного реквизита,
● имя стандартной табличной части,
● индексирование стандартного реквизита.
ВНИМАНИЕ! Наличие описания стандартного реквизита не меняет его имени, то есть все обращения к реквизиту во встроенном языке и в языке запросов остаются неизменными.
5.6.5. Предопределенные данные
5.6.5.1. Общая информация
Предопределенные данные – это элементы прикладных объектов, которые создаются в конфигураторе и обращение к которым возможно по имени, без предварительного поиска. Предопределенные данные имеет смысл создавать в том случае, если какой-либо элемент данных будет нужен постоянно и требуется упростить обращение к этому элементу из программного кода. Например, в справочнике Товары можно завести предопределенный элемент Услуга, обращение к которому будет выглядеть следующим образом: Справочники.Товары.Услуга. Предопределенными могут быть как элементы, так и группы элементов. Группы можно создавать в тех случаях, когда предопределенные элементы создаются в иерархических объектах, например в иерархическом справочнике. Предопределенные данные могут быть созданы:
● для справочников (см. здесь),
● планов счетов (см. здесь),
● планов видов характеристик (см. здесь),
● планов видов расчета (см. здесь).
После создания предопределенного элемента в конфигураторе, возможность создания или обновления связанного с ним элемента данных определяется несколькими параметрами:
● Значение свойства объекта в информационной базе. Получить и установить значение этого свойства можно в режиме «1С:Предприятие» с помощью методов ПолучитьОбновлениеПредопределенныхДанных() и УстановитьОбновлениеПредопределенныхДанных();
● Значение свойства объекта конфигурации ОбновлениеПредопределенныхДанных. Устанавливается в конфигураторе;
● Значение, установленное для всей информационной базы. Получить и установить значение этого свойства можно в режиме «1С:Предприятие» с помощью методов ПолучитьОбновлениеПредопределенныхДанныхИнформационнойБазы() и УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы();
● Вид узла распределенной информационной базы (см. здесь). Значение этого параметра определяется автоматически:
● Для корневого узла и не распределенной информационной базы принимает значение Обновлять автоматически;
● Для подчиненного узла распределенной информационной базы – Не обновлять автоматически.
Каждый вышеописанный параметр может принимать одно из следующих значений (кроме параметра, описывающего вид узла распределенной информационной базы):
● Не обновлять автоматически – в этом случае система не выполняет создание или обновление элемента данных при создании или изменении предопределенных данных. Следует понимать, что если для объекта конфигурации установлено такое свойство, то при обращении к предопределенным данным может генерироваться исключение, т. к. отсутствует элемент данных, связанный с предопределенным элементом;
● Обновлять автоматически – в этом случае система автоматически создаст (или обновит существующие) элементы данных для новых (или измененных) предопределенных данных;
● Авто – система автоматически определяет необходимость выполнения обновления.
Выполняемое действие (обновлять или не обновлять) определяется последовательным анализом вышеперечисленных параметров (в указанном порядке) до тех пор, пока не будет обнаружено значение, отличное от значения Авто. Это значение и будет определять возможность создания или обновления предопределенных элементов.
Связь элемента данных и элемента предопределенных данных осуществляется с помощью свойства ИмяПредопределенныхДанных. С помощью этого свойства имеется возможность выполнять следующие действия:
● Связывать элемент предопределенных данных с элементов данных. Для этого следует присвоить свойству ИмяПредопределенныхДанных имя предопределенного элемента данных, который надо связать с данными:
Копировать в буфер обменаЭлементСсылка = Справочник.Товары.НайтиПоНаименованию("Услуга доставки"); Объект = ЭлементСсылка.ПолучитьОбъект(); Объект.ИмяПредопределенныхДанных = "Услуга"; Объект.Записать();
В результате этой операции, предопределенному элементу Услуга справочника Товары будет сопоставлен элемент данных с именем Услуга доставки.
При записи объекта проверяется, что в информационной базе не существует другого элемента данных с именем предопределенных данных, установленного в значение, с которым записывается элемент данных.
● «Отключить» элемент данных от элемента предопределенных данных. Для этого необходимо присвоить свойству ИмяПредопределенныхДанных пустую строку и записать элемент:
Копировать в буфер обменаОбъект = Справочник.Товары.Услуга.ПолучитьОбъект(); Объект.ИмяПредопределенныхДанных = ""; Объект.Записать();
Если попробовать обратиться к предопределенному элементу Справочник.Товары.Услуга после выполнения вышеприведенного примера, то будет сгенерировано исключение.
Таким образом, процесс смены элемента данных, связанного с предопределенными данными, выполняется в два этапа:
● Выполняется «отключение» существующего элемента данных от предопределенного элемента;
● Выполняется связывание нового элемента данных с предопределенным элементом.
Создание элементов данных, связанных с предопределенными данными, может быть выполнено одним из трех способов:
● Автоматически, во время реструктуризации информационной базы. Это происходит в следующем случае:
● Разрешено автоматическое создание и обновление предопределенных данных;
● Предопределенные данные ранее создавались в данной области данных или информационной базе.
● Автоматически, при первом обращении к таблице, хранящей данных объекта конфигурации. Создание предопределенных элементов в этом случае будет выполняться при условии, что создание предопределенных элементов не запрещено.
● С помощью встроенного языка, указав свойство ИмяПредопределенныхДанных при создании элемента данных. Этот способ можно использовать, если автоматическое создание предопределенных элементов запрещено в свойствах объектов конфигурации.
Обновление данных, связанных с предопределенными, будет выполняться в том случае, если разрешено автоматическое обновление предопределенных данных, предопределенные данные связаны с реальными данными и предопределенные данные изменены в конфигураторе. Во всех остальных случаях информация, введенная в конфигураторе, не будет перенесена в информационную базу.
Изменение порядка следования предопределенных элементов в предопределенных табличных частях плана счетов и плана видов расчета обрабатывается в связанных данных, т. е. порядок элементов в данных будет таким же, каким он задан в метаданных. Данные, введенные пользователем (не предопределенные) будут располагаться после предопределенных.
Если в конфигураторе выполнено удаление элемента предопределенных данных, то будет выполнено следующее:
● Элемент данных, связанный с элементом предопределенных данных, будет помечен на удаление.
● В списке субконто элемента плана счетов будут удалены соответствующие записи.
● В списках ведущих, базовых и вытесняющих видов расчета будут удалены соответствующие записи.
Для принудительного создания элементов предопределенных данных (для справочников, планов видов характеристик, планов видов расчетов и планов счетов) следует воспользоваться методом ИнициализироватьПредопределенныеДанные(). Вызов этого метода выполнит принудительное создание элементов предопределенных данных при выполнении следующих условий:
● Предопределенные элементы ранее не создавались в текущей области данных.
● Обновление предопределенных данных настроено таким образом, что создание и обновление предопределенных данных должно выполняться.
Если указанные условия не выполняются – создание предопределенных элементов не выполняется.
Если в прикладном решении отключено автоматическое обновление предопределенных данных, то удаление предопределенного элемента приводит к изменению в связанном объекте данных (если таковой есть). Значение свойства ИмяПредопределенныхДанных заменяется значением #xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx, где xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx – это уникальный идентификатор удаленного элемента метаданных.
Если требуется получить список предопределенных элементов для объекта конфигурации, то сделать это можно с помощью метода ПолучитьИменаПредопределенных().
Пример получения списка предопределенных:
Копировать в буфер обменаСписок = Метаданные.Справочники.Товары.ПолучитьИменаПредопределенных();
Если метод вернул пустой массив, значит, у объекта конфигурации отсутствуют предопределенные значения. В противном случае можно, например, для каждого предопределенного элемента выполнить проверку наличия связанного элемента в данных.
5.6.5.2. Работа в распределенной информационной базе
При работе в режиме распределенной информационной базы вместе с конфигурацией передаются предопределенные элементы. Собственно элементы данных, связанные с предопределенными данными, передаются обычным образом, с помощью плана обмена. При этом автоматическое создание предопределенных данных в периферийной информационной базе не произойдет, подробное описание причины см. здесь.
Внимание! Если данные, связанные с предопределенными элементами, оказались получены в подчиненном узле раньше, чем конфигурация со связанными предопределенными элементами, то автоматического «связывания» данных и предопределенных данных не произойдет. Для этого потребуется повторно выгрузить из центральной в периферийную информационную базу нужные элементы данных.
Если начальный образ периферийной информационной базы создается до того, как с главной информационной базой начали работать, можно воспользоваться специальным методом ИнициализацияПредопределенныхДанных() для создания предопределенных элементов, чтобы они автоматически попали в периферийную информационную базу. Метод надо вызывать до того, как выполнено создание начального образа.
При отмене назначения главного узла (например, для выполнения каких-либо специальных действий), следует учитывать следующий момент: при определении необходимости создания или обновления предопределенных элементов такая информационная база не будет считаться периферийной. В связи с этим, при первом запуске такой информационной базы в режиме «1С:Предприятие», режим создания или обновления предопределенных элементов может быть определен как Обновлять автоматически. Чтобы избежать этого, можно воспользоваться параметром командной строки /SetPredefinedDataUpdate (или использовать метод глобального контекста УстановитьОбновлениеПредопределенныхДанныхИнформационнойБазы()).
Этим же способом можно воспользоваться в том случае, если используется универсальный механизм обмена данными между информационными базами с подобными, но не идентичными типовыми решениями, и необходимо сделать одну информационную базу ведущей (в части предопределенных данных). Для информационной базы, где необходимо создавать предопределенные элементы, следует указать значение Создавать автоматически, а для другой информационной базы – Не создавать автоматически. При этом связь элемента конфигурации и объекта данных будет выполняться по имени предопределенного элемента.
Также при использовании универсального механизма обмена данными следует учитывать следующие особенности:
● При записи объекта данных, который в базе-источнике является предопределенным, система проверяет наличие такого же имени предопределенных данных в типообразующем объекте конфигурации. Если такое имя есть – объект будет загружен без изменений. Если такого имени нет – в объекте при загрузке будет очищено свойство ИмяПредопределенныхДанных.
Например, выполняется универсальный обмен данными между одинаковыми информационными базами. В каждой информационной базе существует справочник Номенклатура. В каждой информационной базе в этом справочнике содержится предопределенный элемент Услуга. Ссылки на эти объекты данных разные.
Тогда при загрузке произойдет следующее: система обнаружит наличие в базе-приемнике предопределенный элемент Услуга и выполнит загрузку с сохранением свойства ИмяПредопределенногоЭлемента. Это будет возможно в том случае, если перед записью элемента свойство ОбменДанными.Загрузка установлено в значение Истина. В противном случае будет вызвано исключение.
Однако при попытке обратиться в базе-приемнике к предопределенному элементу Услуга, произойдет ошибка, т. к. в системе не может быть двух объектов, связанных с одинаковым предопределенным элементом.
Не следует допускать возникновения такой ситуации. Прикладной разработчик должен самостоятельно обрабатывать попытку загрузки объекта данных с дублирующим именем предопределенных данных.
● При записи объекта данных, у которого имя предопределенных данных ссылается на удаленный элемент (имеет вид #xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx), то такой элемент будет записан в любом случае. Однако система не позволит записать два объекта, ссылающиеся на один удаленный предопределенный элемент (с одинаковым значением имени предопределенных данных), кроме как в случае, когда перед записью элемента свойство ОбменДанными.Загрузка установлено в значение Истина.
При необходимости отключать информационной базы от главного узла, при использовании подчиненных данных, рекомендуется следовать рекомендациям, описание которых см. здесь.
5.6.5.3. Работа в режиме разделения
Описание особенностей работы в разделенной информационной базе см. здесь.
5.6.6. Нумерация объектов
5.6.6.1. Общая информация
В системе «1С:Предприятие» существуют объекты, которые необходимо нумеровать в автоматическом или ручном режиме. Нумерация доступна для следующих объектов:
● Справочники;
● Документы;
● Планы видов характеристик;
● Бизнес-процессы;
● Задачи;
● Планы обмена.
В зависимости от объекта, доступны различные виды и режимы нумерации. Нумерация может выполняться для номера (документы, бизнес-процессы, задачи) и кода (все остальные объекты). Рассмотрим особенности нумерации объектов более подробно.
Тип кода/номера
Код/номер объекта конфигурации может быть числовым или строковым.
Если код/номер задается строковым, то появляется несколько различных дополнительных возможностей:
● Код/номер может состоять не только из цифр, а из любых доступных символов.
● Допустимая длина кода – определяет, какую длину будет иметь код/номер. Если это свойство имеет значение Фиксированная, то длина кода/номера всегда будет равна значению, указанному в качестве свойства Длина кода или Длина номера. При этом строка будет дополняться пробелами. Если для свойства выбрано значение Переменная, то длина кода/номера не может быть больше значения, указанного в свойствах Длина кода или Длина номера, но фактическая длина будет определяться количеством символов, участвующих в формировании номера.
● Для кода/номера имеется возможность задавать различные префиксы (см. здесь).
При использовании строкового кода/номера необходимо понимать, как работает нумерация. Рассмотрим пример нумерации. Тип кода справочника – Строка. Длина кода – 3 символа. Допустим, оператор ввел номер 01 и записал элемент справочника. В результате этого действия максимальное значение номера, который может быть создан системой автоматической нумерации, будет равен 99. Это произошло потому, что при ручном вводе нового номера произошло явное ограничение длины номер двумя разрядами. Система автоматической нумерации «не умеет» автоматически расширять создаваемый номер, если длина номера явно ограничена.
Таким образом, для того, чтобы автоматическая нумерация строковых кодов/номеров работала хорошо, рекомендуется или не указывать номера вручную или задавать лидирующие нули так, чтобы любой код/номер всегда был максимально возможной длины (с учетом ведущих нулей).
Также не стоит забывать, что указание ведущих нулей обеспечит корректную сортировку кодов/номеров в случае, если тип кода/номера является строкой.
Признак автонумерации
Данное свойство определяет, будет система автоматически назначать код/номер для нового объекта при записи объекта или нет. В случае включенной автоматической нумерации система обеспечивает следующее поведение:
● Выдается код/номер, не совпадающий ни с одним номером в информационной базе;
● Выдаваемый код/номер должен быть на 1 больше максимального из значения кода/номера среди объектов информационной базы (по которым обеспечивается нумерация) и кодов/номеров, которые выданы для объектов, еще не записанных в информационную базу.
● При удалении или ручном уменьшении максимального кода/номера, нумерация (при возможности) продолжается с максимального оставшегося номера/кода. Продолжение нумерации с минимально возможного кода/номера в общем случае не гарантируется.
Контроль уникальности
Данное свойство определяет, будет система контролировать уникальность кода/номера для объекта или нет. Контроль будет выполняться как для автоматически назначенного кода/номера, так и для кода/номера, который указан вручную.
Нумератор
Для документов имеется возможность указывать нумератор, что, например, позволяет обеспечить общее пространство номеров для нескольких разных видов документов. Подробнее о нумераторах см. здесь.
5.6.6.2. Серии кодов/номеров
Для справочников и планов видов характеристик имеется возможность указать, каким образом будет формироваться новый номер. Это можно сделать с помощью свойства Серии кодов:
● Во всем справочнике/Во всем плане видов характеристик – в процессе формирования нового кода для элемента справочника/плана видов характеристик будет сформирован код, уникальный во всем справочнике/плане видов характеристик;
● В пределах подчинения – в процессе формирования нового кода для элемента справочника/плана видов характеристик будет сформирован код, уникальный в пределах иерархии элемента (элементы, имеющие одного и того же родителя будут иметь различные коды, элементы, имеющие разных родителей могут иметь одинаковые коды);
● В пределах подчинения владельцу – в процессе формирования нового кода для элемента справочника будет сформирован код, уникальный в пределах подчинения (элементы, имеющие одного и того же владельца будут иметь различные коды; элементы, имеющие различных владельцев могут иметь одинаковые коды). Данный вариант применим только для справочников.
5.6.6.3. Периодичность кодов/номеров
Для документов и бизнес-процессов имеется возможность обеспечивать периодичность номеров. Это означает, что нумерация начнется с начала, каждый раз, когда начинается новый период. Периодичность настраивается с помощью свойства Периодичность. Данное свойство может принимать следующие значения:
● Непериодический – нумерация не зависит от временных периодов;
● В пределах года – нумерация начинается сначала при наступлении нового года;
● В пределах квартала – нумерация начинается сначала при наступлении нового квартала;
● В пределах месяца – нумерация начинается сначала при наступлении нового месяца;
● В пределах дня – нумерация начинается сначала при наступлении нового дня.
Контроль уникальности при периодической нумерации будет выполняться в рамках установленного периода (за год, квартал, месяц или день). Если задана непериодическая нумерация, то уникальность будет контролироваться во всех существующих объектах данного вида.
Принадлежность к тому или иному периоду определяется по дате документа или бизнес-процесса, а не по текущей дате. В связи с этим изменение даты документа или бизнес-процесса может привести к изменению номера в том случае, когда новая дата относится к другой периодичности (если таковая установлена).
5.6.6.4. Префиксы нумерации
При автоматизации различных задач может возникать задача обеспечения раздельной нумерации объектов одного вида в зависимости от некоторых условий. Например, в информационной базе ведется учет от лица нескольких фирм и для каждой фирмы нужна собственная нумерация документов. Данная задача решается с помощью префиксов кодов/номеров. Префикс кода/номера – это последовательность символов, предваряющих собственно код/номер, в рамках которых происходит нумерация объектов. Использование префиксов нумерации имеет несколько особенностей:
1. Префиксы используются только со строковым типом кода/номера.
2. Длина кода/номера, при использовании префикса, может оказаться больше, чем без использования префикса (на размер префикса и разделителя). Так, если изначально длина кода была задана в 6 символов, и необходимо начать использование префикса длиной 3 символа, то для сохранения пространства нумерации в 6 разрядов, необходимо длину кода/номера увеличить до 9 символов (6 символов – собственно код и 3 символа – префикс).
3. Для автоматического изменения префиксов в зависимости от значений реквизитов объектов необходимо выполнять дополнительные действия на встроенном языке.
Для установки нового номера, с учетом префикса, следует использовать обработчик ПриУстановкеНовогоКода()/ПриУстановкеНовогоНомера() или методы УстановитьНовыйКод()/УстановитьНовыйНомер() с указанием нужного префикса. Если префикс не указан или указан не полностью, то среди существующих в информационной базе префиксов будет определен максимальный префикс (в алфавитном порядке) и в рамках этого префикса будет получен новый номер.
Рассмотрим примеры поведения системы нумерации.
Есть два объекта, у которых указаны номера А-151 и Б-152. При установке нового кода для префикса А– будет получен номер А-152, а для префикса Б– – номер Б-153. Если в системе есть объекты со следующими номерами: АА151, АБ150 и БВ114, то, в зависимости от заданного префикса, возможны несколько вариантов полученных номеров (каждое описание действий префикса отталкивается от стартовых значений номеров и не учитывает действия других примеров):
● Указан префикс АА. В этом случае будет получен номер АА152.
● Указан префикс АБ. В этом случае будет получен номер АБ151.
● Указан префикс А. В этом случае будет получен номер АБ151. Такой номер будет получен в результате того, что префикс указан не полностью и система доопределит максимальный префикс (в алфавитном порядке). Этим префиксом будет префикс АБ и в рамках этого префикса будет получен новый номер: АБ152.
Рассмотрим пример установки префикса в зависимости от значения реквизита объекта.
Допустим, что у нас существует документ, который содержит реквизит Организация типа СправочникСсылка. Реквизит Префикс (типа Строка) справочника Организации содержит префикс номера документа. Таким образом, для каждой организации будет поддерживаться собственная уникальная нумерация. Для назначения префикса следует в модуле объекта используемого документа создать обработчик ПриУстановкеНовогоНомера(), в котором будет устанавливаться префикс номера документа в зависимости от организации, выбранной в конкретном экземпляре документа.
Пример:
Копировать в буфер обменаПроцедура ПриУстановкеНовогоНомера(СтандартнаяОбработка, Префикс) Префикс = Организация.Префикс+"-"; КонецПроцедуры
5.6.6.5. Особенности работы механизма автонумерации
Контроль уникальности кода/номера объекта, если установлено свойство Контроль уникальности, выполняется при его записи, вне зависимости от режима автонумерации объектов и того, каким образом объекту присваивается новый код/номер – вручную или автоматически. Если объект записывается в «режиме загрузки» (при записи объекта свойство ОбменДанными.Загрузка установлено в значение Истина) – контроль уникальности кода/номера не производится.
5.6.7. Ввод по строке
5.6.7.1. Общая информация
Для прикладных объектов (справочники, документы, планы видов характеристик, планы счетов, планы видов расчета, регистры, бизнес-процессы и задачи, а также планы обмена) в свойстве Ввод по строке можно указать те реквизиты, по которым выполняется поиск. Если ввод по строке разрешен (заданы соответствующие реквизиты), то допустимо в поле ввода соответствующего типа не выполнять выбор из формы объекта, а ввести информацию, которая содержится в заданных реквизитах объекта.

Рис. 133. Ввод по строке
Например, у нас есть справочник Номенклатура, в котором находится несколько товаров, начинающихся со слова Bosch. Тогда, введя в поле ввода номенклатуры слово bosс, мы получим список товаров, которые начинаются с этого слова (см. рис.133).
В качестве реквизитов, по которым будет выполняться поиск, могут выступать:
● Для справочников, планов видов характеристик, планов счетов, планов видов расчета, планов обмена – Код и Наименование.
● Для документов – Номер.
● Для бизнес-процессов и задач – Номер и Наименование.
● Реквизиты, имеющие тип Число или Строка, для которых свойство Индексировать имеет значение Индексировать или Индексировать с доп. упорядочиванием. Примером последних может служить поле для ввода артикула, штрихкода, ИНН.
Для формирования списка реквизитов нужно нажать кнопку выбора и в открывшемся диалоге перенести в левый список те поля, по которым может производиться ввод по строке.

Рис. 134. Настройка ввода по строке
Если полей несколько, то установить порядок их следования. При поиске по строке поиск выполняется в полях в той последовательности, в которой они приведены в данном диалоге. Например, для элемента справочника Номенклатура ввод может осуществляться как по коду, так и по артикулу. Если значение кода одного элемента совпадет со значением артикула другого, то в список найденные значения попадут в том порядке, в котором указаны при настройке.
ВНИМАНИЕ! При выполнении поиска данных (во время ввода по строке) действуют ограничения доступа к данным (см. здесь).
Кроме указания того, по каким полям будет выполняться поиск, система позволяет дополнительно настроить некоторые параметры поиска. Свойство Способ поиска строки предназначено для указания способа поиска строки:
● Только в начале поля, выбранного для ввода по строке (значение Начало). В этом случае поисковая строка не разбивается на слова, а введенный текст ищется целиком. Например, если поиск выполняется в следующих данных: Иванов Максим и Максимов, то при вводе в поле ввода слова Максим будут найдены данные Максимов, а при вводе в поле ввода Иван Макс не будет найдено ничего.
● В любой части поля (значение Любая часть). Если строка поиска состоит из нескольких слов и поиск выполняется в любой части, то для поиска используется запрос, аналогичный следующему (для двух полей и двух слов):
Копировать в буфер обмена(Поле1 ПОДОБНО "%Слово1%" ИЛИ Поле2 ПОДОБНО "%Слово1%") И (Поле1 ПОДОБНО "%Слово2%" ИЛИ Поле2 ПОДОБНО "%Слово2%")
Свойство Полнотекстовый поиск позволяет задействовать полнотекстовый поиск при организации ввода по строке. Полнотекстовый поиск нельзя использовать для таблиц внешних источников данных. Использование полнотекстового поиска обладает несколькими особенностями:
1. Полнотекстовый поиск всегда выполняется по началу слов.
2. Полнотекстовый поиск используется для первоначального отбора объектов, в которых будет выполняться дальнейший поиск (уменьшается количество объектов, в которых будет выполняться поиск).
3. В списке отобранных объектов будет выполняться поиск по полям, которые отобраны для использования в механизме ввода по строке способом, который задан свойством Способ поиска строки.
4. Для каждого слова из поискового запроса в конце добавляется символ "*".
Указанные особенности могут привести к тому, что:
● Полнотекстовый поиск может чрезмерно сузить набор данных для поиска, если используется поиск по любой части вместе с полнотекстовым поиском. В результате данные найдены не будут. При этом отключение полнотекстового поиска приведет к нахождению нужных данных. Это произойдет потому, что полнотекстовый поиск ищет только по началу слова. Если искомый текст не находится в начале слова – ввод по строке не найдет такие данные.
● Неактуальный индекс полнотекстового поиска может негативно сказаться на результатах поиска.
● Если полнотекстовый поиск завершился с ошибкой, то будет применяться обычный поиск, в соответствии со свойством Способ поиска строки. Это может привести к ситуации, когда найденный объект превратиться в ненайденный (для способа поиска по любой части слова). Например: в поле ввода введен символ «а», который есть не только в начале, а и в середине массива слов, в котором выполняется поиск. Для большого набора данных полнотекстовый поиск завершится с ошибкой (слишком большой результат поиска) и с помощью обычного поиска будут найдены данные, которые внутри себя содержат букву «а». Затем пользователь введет еще одну букву (например, «ц») и поисковая строка станет «ац». В этом случае полнотекстовый поиск отберет только те данные, которые начинаются на «ац» и проигнорирует те данные, которые содержат «ац» внутри себя.
Если выпадающий список формируется системой (а не с помощью программного кода прикладного решения), то представления найденных объектов формируются по специальному алгоритму. Представление найденного объекта состоит из двух частей: представление реквизита, содержащего строку поиска (обязательная часть) и дополнительное представление (не обязательная часть).
Собственно представление формируется следующим образом:
● Определяется поле, содержащее поисковую строку:
● В случае использования полнотекстового поиска или при обычном поиске по нескольким словам таким полем будет первое поле, из состава полей, указанных в свойстве Ввод по строке, в котором найдено первое слово из поисковой строки.
● При использовании обычного поиска по одному слову таким полем будет реквизит, в котором выполнялся поиск.
● Представление значения, расположенного в определенном поле будет являться обязательной частью представления найденного объекта для выпадающего списка.
● Определяется, необходимо или нет формировать дополнительное представление. Для этого определяется состав полей, который будет использоваться для формирования дополнительного представления:
● Если у найденного объекта есть только одно поле, используемое для формирования представления, и поисковая строка обнаружена в этом реквизите – используются поля альтернативного представления.
● В противном случае используются поля основного представления. Список полей основного и альтернативного представления приведен ниже.
● Если список полей для формирования дополнительного представления является пустым – дополнительное представление не формируется. В противном случае дополнительное представление формируется следующим образом:
● В круглые скобки заключается текстовое представление всех полей, которые выбраны для формирования дополнительного представления, через ", ";
● Сформированное дополнительное представление добавляется справа, через пробел, к обязательной части представления найденного объекта.
● Для формирования основного и альтернативного представления используются следующие поля:
● Справочник, бизнес-процесс, план видов характеристик, план счетов, план видов расчета:
● Основное представление: Наименование, Код.
● Альтернативное представление: в зависимости от того, какое выбрано основное представление, для альтернативного представления используется оставшееся поле.
● Документ:
● Основное представление: Номер, Дата.
● Альтернативное представление: отсутствует.
● Задача:
● Основное представление: Наименование, Номер, Дата.
● Альтернативное представление: отсутствует.
● Внешний источник данных:
● Основное представление: поле указанное в свойстве Поле представления таблицы внешнего источника данных (см. здесь).
● Альтернативное представление: отсутствует.
Свойство Режим получения данных выбора управляет тем, как платформа осуществляет поиск данных при вводе по строке. Если свойство установлено в значение Фоновый, то для получения данных используется фоновое задание, а в выпадающем списке отображается анимированная картинка, аналогичная фоновому выполнению отчета (см. здесь). Фоновое задание используется в том случае, если за 200 мс требуемые данные не получены для отображения пользователю. Для файлового варианта информационной базы возможно получение данных в фоновом режиме в том случае, если в момент получения данных не выполняется другое фоновое или регламентное задание. Во время фонового получения результатов выбора пользователь может продолжать редактировать поле ввода. Указанием значения Непосредственно в качестве значения свойства приводит к тому, что поиск выполняется без использования фоновых заданий.
При настройке ввода по строке рекомендуется следовать следующим рекомендациям:
● Значение Фоновый для свойства Режим получения данных выбора рекомендуется устанавливать для объектов, в которых планируется большое количество данных.
● Полнотекстовый поиск рекомендуется включать для объектов, в которых ожидается большое количество данных.
● Поиск строки в любом месте рекомендуется включать совместно с фоновым поиском, либо в таблицах, в которых не ожидается большого количества данных. Желательно, так же при большом количестве данных, если включается поиск в любом месте, то включать и полнотекстовый поиск (чтобы большая часть поисков выполнялась бы через полнотекстовый поиск).
5.6.7.2. Особенности поведения поля ввода
При вводе данных в поле ввода следует учитывать некоторые особенности работы со списком выбора. Если в результате набора обнаружено несколько объектов, начинающихся с введенного текста, то список этих объектов будет расположен в выпадающем списке. Во время ввода пользователь может с помощью кнопок Стрелка вверх и Стрелка вниз передвигаться по списку, при этом продолжая набор текста в самом поле. В этом случае для осуществления выбора требуется выбрать необходимый элемент и подтвердить выбор нажатием кнопки Enter или Tab. Для формирования списка выбора для поля ввода используется следующий алгоритм:
1. Выполняется получение данных при выполнении поиска в первом поле (из списка выбранных полей) по началу строки и по подстроке. Количество записей, полученных в результате поиска по началу строки, будем называть РС, а количество записей, полученных в результате поиска по подстроке, будем называть РП.
2. Если РС+РП<=10, то в выпадающий список попадут все результаты каждого поиска.
3. Если РП и РС больше 5 (каждый), то в список выбора попадет по 5 записей из каждого списка.
4. Если любое из значений РП или РС меньше 5, то в выпадающий список попадут все записи из меньшего списка и столько записей из большего списка, чтобы дополнить выпадающий список до 10.
5. Если общее количество записей в выпадающем списке оказалось меньше 10, то выполняем алгоритм с шага 1 для следующего поля из списка выбранных полей, используя разницу между 10 и количеством полученных результатов как число необходимых к получению данных на следующем шаге.
5.6.7.3. Программное формирование списка выбора
Если разработчика не устраивает, каким образом формируется список выбора, он может переопределить его самостоятельно.
Сделать это можно двумя способами:
● Непосредственно в форме – в этом случае особое формирование списка выбора будет работать только для этого, единственного поля. Для этого необходимо определить обработчики событий НачалоВыбора, АвтоПодбор и ОкончаниеВводаТекста.
● В модуле менеджера соответствующего объекта – в этом случае особое формирование списка выбора будет выполняться для всех полей ввода, в которых вводятся значения используемого объекта.
Если поле связано с данными, имеющими тип ссылки на прикладной объект (например, СправочникСсылка, ПеречислениеСсылка и т. д.), то список выбора можно сформировать или в модуле менеджера соответствующего объекта, или с помощью обработчиков модуля формы. В остальных случаях список выбора можно сформировать только с помощью обработчиков модуля формы.
Подробнее остановимся на втором способе.
Для программного формирования списка выбора необходимо переопределить обработчик события ОбработкаПолученияДанныхВыбора менеджера объекта. Обработчик получает набор параметров, определяющих условия формирования списка выбора. Набор параметров представляет собой структуру, которая содержит:
● Строку поиска – текстовую строку, содержащую текст, который пользователь ввел в поле ввода. Данное свойство присутствует всегда (свойство СтрокаПоиска).
● Отбор – структура, которая описывает отбор так, как его описывает параметр формы Отбор для расширения формы для динамического списка. Данное свойство присутствует всегда.
Отбор, указанный в данном свойстве, будет конвертироваться (по возможности) в запрос полнотекстового поиска, уточняя этот запрос для повышения скорости поиска.
● Свойство, которое указывает режим выбора групп и элементов (передается только для иерархических списков) – свойство ВыборГруппИЭлементов.
● Свойство, которое определяет способ поиска строки: по началу слова или по любой части (свойство СпособПоискаСтроки).
● Необходимость использования полнотекстового поиска (свойство ПолнотекстовыйПоиск).
● Режим получения данных выбора (свойство РежимПолученияДанныхВыбора).
● Кроме этого, в структуре передаются элементы, которые заданы в свойствах элемента формы – Связи параметров выбора (см. здесь) и Параметры выбора (см. здесь).
Кроме того, в обработчик передается переменная, в которую следует вернуть сформированный список выбора, и параметр СтандартнаяОбработка, который определяет поведение системы после того, как произойдет выход из обработчика.
Если разработчик устанавливает параметр СтандартнаяОбработка в значение Ложь, то ему необходимо самому полностью формировать список выбора.
Если флажок стандартной обработки установить в значение Истина, то можно предоставить системе возможность сформировать список выбора, но при этом можно модифицировать параметры выбора (добавить дополнительные значения отбора, изменить режим выбора групп и элементов и т. д.).
Примечание 1. Если система сама формирует список выбора, при формировании списка учитываются ограничения доступа к данным (см. здесь).
Примечание 2. Примеры, приведенные ниже, не являются законченным. Они предназначены для демонстрации различных механизмов получения списков выбора.
Так, следующий код в случае любого текста, вводимого пользователем, будет предоставлять выбор из трех товаров, с кодами 00000002, 00000003 и 00000004.
Пример:
Копировать в буфер обменаПроцедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) ДанныеВыбора = Новый СписокЗначений; ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду("00000002")); ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду("00000003")); ДанныеВыбора.Добавить(Справочники.Товары.НайтиПоКоду("00000004")); СтандартнаяОбработка = Ложь; КонецПроцедуры
В следующем примере отбор, который сформировало поле ввода, будет расширен установкой дополнительного отбора так, чтобы в список выбора не попали услуги. При этом все формирование списка выбора берет на себя система.
Пример:
Копировать в буфер обменаПроцедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Параметры.Отбор.Вставить("Вид", Перечисления.ВидыТоваров.Товар); КонецПроцедуры
В качестве последнего примера рассмотрим упрощенный случай реализации отбора полностью средствами встроенного языка. В этом примере будет рассмотрен отбор товаров, название которых начинается со строки, введенной пользователем в поле ввода.
Пример:
Копировать в буфер обменаПроцедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ РАЗРЕШЕННЫЕ | Товары.Ссылка как Товар |ИЗ | Справочник.Товары КАК Товары |ГДЕ | Товары.Наименование ПОДОБНО &Наименование"; Запрос.УстановитьПараметр("Наименование", Параметры.СтрокаПоиска + "%"); Результат = Запрос.Выполнить(); ТаблицаРезультатов = Результат.Выгрузить(); МассивТоваров = ТаблицаРезультатов.ВыгрузитьКолонку("Товар"); ДанныеВыбора = Новый СписокЗначений; ДанныеВыбора.ЗагрузитьЗначения(МассивТоваров); СтандартнаяОбработка = Ложь; КонецПроцедуры
Также следует обратить внимание на еще один способ формирования списка выбора: передачу в качестве значения элемента списка значений не ссылки на искомый объект (как в примерах выше), а структуру особого содержания.
Эта структура состоит из следующих элементов:
● Значение – собственно значение выбираемого элемента. Элемент структуры с таким именем должен быть обязательно.
● ПометкаУдаления – признак, что выбираемое значение помечено на удаление в информационной базе. Элемент структуры с таким именем не является обязательным.
● Предупреждение – строка с текстом предупреждения, которое отобразит «1С:Предприятие» при выборе такого элемента из списка значений. Элемент структуры с таким именем не является обязательным.
Если в структуре свойство ПометкаУдаления равно значению Истина и не указано свойство Предупреждение, то система автоматически сформирует текст предупреждения. Если свойство Предупреждение указано, то отображается именно оно. Следует помнить, что текст Предупреждение завершается вопросом Продолжить? и отображается в качестве вопроса с вариантами ответа Да и Нет.
Далее будет показана модификация предыдущего примера, в котором для складов с установленным в значение Истина реквизитом НеИспользовать будет сформировано предупреждение Этот склад не должен использоваться.
Также можно совмещать в одном списке выбора и значения типа Структура, и простые значения.
Пример:
Копировать в буфер обменаПроцедура ОбработкаПолученияДанныхВыбора(ДанныеВыбора, Параметры, СтандартнаяОбработка) СтандартнаяОбработка = Ложь; ДанныеВыбора = Новый СписокЗначений; // Сформируем список с предупреждениями Запрос = Новый Запрос; Запрос.Текст = "ВЫБРАТЬ | Склады.Ссылка, | Склады.Наименование, | Склады.НеИспользовать |ИЗ | Справочник.Склады КАК Склады"; Результат = Запрос.Выполнить(); ВыборкаДетальныеЗаписи = Результат.Выбрать(); Пока ВыборкаДетальныеЗаписи.Следующий() Цикл Структура = Новый Структура("Значение", ВыборкаДетальныеЗаписи.Ссылка); // Заполним предупреждение Если ВыборкаДетальныеЗаписи.НеИспользовать Тогда Структура.Вставить("Предупреждение", "Этот склад не должен использоваться!"); КонецЕсли; Элемент = ДанныеВыбора.Добавить(); Элемент.Значение = Структура; Элемент.Представление = ВыборкаДетальныеЗаписи.Наименование; КонецЦикла; КонецПроцедуры
Примечание. Если представления элементов (в том числе и элементов структуры с именем Значение) не указаны в явном виде, то они будут получены автоматически.
5.6.8. Формы
Форма – это объект, созданный для ввода или просмотра какой-либо информации, а также для управления различными процессами. С помощью форм программа запрашивает у пользователя ту информацию, которая необходима ей для дальнейшей работы, либо выдает какую-либо информацию пользователю для просмотра и редактирования.
В тех случаях, когда необходимо обеспечить функционирование конфигурации одновременно в обычном и управляемом режимах, можно использовать дополнительные формы объектов метаданных. При этом «1С:Предприятие» будет автоматически выбирать для использования ту форму, которая соответствует текущему режиму работы.

Рис. 135. Основные и дополнительные формы
Тонкий клиент и веб-клиент оперируют только управляемыми формами. Значит:
● если обе назначенные формы – управляемые, то будет открыта та форма, которая назначена как основная;
● если среди назначенных форм есть только одна управляемая, будет открыта именно она;
● если управляемая форма не назначена, она будет сгенерирована автоматически.
Толстый клиент при выборе формы старается выбрать форму, которая максимально соответствует текущему режиму запуска:
● если никакие формы не назначены, то будет сгенерирована:
● в обычном режиме – обычная форма;
● в управляемом режиме – управляемая форма;
● если назначена только одна форма, то именно она и будет открыта;
● если назначены две формы, обычная и управляемая, то будет открыта:
● в обычном режиме – обычная форма;
● в управляемом режиме – управляемая форма.
● если назначены две обычные или две управляемые формы, то будет открыта та форма, которая назначена основной.
Двойной комплект форм можно использовать в тех случаях, когда вы переводите вашу конфигурацию из неуправляемого в управляемый режим, либо когда необходимо, например, часть возможностей конфигурации сделать доступными в веб-клиенте (или тонком клиенте). В этом случае можно реализовать необходимые возможности в управляемых формах и указать их в качестве дополнительных форм. Тогда при работе в режиме веб-клиента (или тонкого клиента) будут использоваться нужные формы (управляемые).
Однако следует учитывать, что на получение форм по умолчанию в толстом клиенте оказывают влияние свойства конфигурации Использовать управляемые формы в обычном приложении и Использовать обычные формы в управляемом приложении:
● Если свойство конфигурации Использовать управляемые формы в обычном приложении имеет значение Ложь, то в толстом клиенте, в обычном режиме, при получении формы по умолчанию обязательно должна быть получена обычная форма. Если ни основная, ни дополнительная форма не является обычной, то генерируется обычная форма.
● Если свойство конфигурации Использовать обычные формы в управляемом приложении имеет значение Ложь, то в толстом клиенте, в управляемом режиме, при получении формы по умолчанию обязательно должна быть получена управляемая форма. Если ни основная, ни дополнительная форма не является обычной, то генерируется управляемая форма.
Если в результате открывается форма, которая автоматически сгенерирована системой и режим запуска клиентского приложения отличается от режима запуска, установленного в свойстве конфигурации Основной режим запуска, то формы объектов и формы наборов записей открываются в режиме Только просмотр. Также в формах списков и формах объектов будут отсутствовать команды Создать на основании, а в формах списков – команда Создать, если для выполнения этих команд системе необходимо автоматически сгенерировать форму, подходящую для текущего режима запуска и режим запуска клиентского приложения отличается от режима запуска, установленного в свойстве конфигурации Основной режим запуска.
Если в качестве основного режима запуска прикладного решения выбрано управляемое приложение, то для каждой управляемой формы прикладного решения можно выбрать назначение формы. Свойство формы Назначения использования эквивалентно (по составу и применению) аналогичному свойству конфигурации (см. здесь). Поведение редактора формы зависит от пересечения множеств назначений конфигурации и конкретной формы.
Если в пересечении отсутствует значение Персональный компьютер, то:
● В палитре свойств недоступны свойства реквизитов, параметров, команд, элементов, которые не поддерживаются мобильной платформой;
● Недоступно редактирование контекстного меню элемента формы;
● Недоступно редактирование расширенной подсказки для элемента формы;
● Недоступны те виды полей формы, которые не поддерживаются мобильной платформой (см. здесь);
● Редактор настроек динамического списка не позволяет разворачивать доступные поля (связано с тем, что на мобильной платформе динамический список работает строго с одной таблицей).
Если в назначении формы отсутствует значение Мобильное приложение, то она не включается в конфигурацию мобильного приложения.
5.6.9. Команды
Для выполнения операций, связанных с конкретным объектом метаданных, существуют команды этого объекта. При этом непараметризованные команды объекта будут доступны в командном интерфейсе тех подсистем, в состав которых входит объект метаданных. Если команда является параметризованной, то она будет доступна в тех формах, которые содержат реквизиты формы (включая подчиненные реквизиты первого уровня основного реквизита формы) того же типа, что и тип параметра команды.
Для команд требуется написать процедуру выполнения команды. Для этого служит модуль команды, в котором необходимо реализовать обработчик ОбработкаКоманды(). Данная процедура должна предваряться директивой &НаКлиенте, так как выполнение команды происходит в клиентском приложении. Однако другие процедуры и функции, расположенные в модуле команды, могут предваряться другими директивами, если это необходимо для выполнения команды. Подробнее про директивы компиляции см. здесь.
Модуль команды может содержать, например, открытие формы отчета с предварительно установленным ему параметром для вывода на печать карточки определенного бухгалтерского счета или открытие формы списка товаров с установленным отбором по виду товара. Если команда, принадлежащая группе Панель навигации, должна открывать одну и ту же форму в разных закладках, следует при получении (или открытии) формы указывать ключ уникальности или ключевой параметр формы.
Примечание. Если команда расположена в панели навигации основного окна приложения (см. здесь), то повторный выбор этой команды не приведет к ее (команды) повторному выполнению. Это относится и к стандартным командам, и к командам, созданным в конфигурации.
5.6.10. Механизм заполнения реквизитов новых объектов
Существует возможность заполнения реквизитов новых объектов при интерактивном создании (кроме копирования), при вводе на основании, при использовании методов ОткрытьФорму()/ПолучитьФорму() или при явном вызове метода Заполнить(). Это заполнение может выполняться:
● значениями отбора при вводе из списка;
● конкретными значениями, указанными в конфигурации в свойствах реквизитов (значения заполнения);
● значениями, которые разработчик указал в обработчике события ОбработкаЗаполнения().
Механизм обработки заполнения реализован для следующих объектов:
● планы обмена,
● справочники,
● документы,
● планы видов характеристик,
● планы счетов,
● планы видов расчета,
● наборы записей регистров сведений,
● бизнес-процессы,
● задачи.
Для получения данных заполнения в обработчике ОбработкаЗаполнения() существует параметр ДанныеЗаполнения. В зависимости от того, каким образом вызван обработчик, значение параметра ДанныеЗаполнения может принимать разные значения:
● Ввод на основании – в качестве значения параметра передается ссылка на объект-основание. При этом значение параметра ДанныеЗаполнения будет являться ссылкой на объект-основание базы данных.
● Ввод из списка с установленным отбором – в качестве значения параметра передается структура, элементами которой становятся используемые элементы отбора с установленным видом сравнения Равно или В списке (при этом в списке находится единственное значение). При создании нового документа из формы журнала документов элементы отбора по графам журнала предварительно преобразуются таким образом, чтобы в качестве имени элемента структуры ДанныеЗаполнения выступало имя реквизита документа, а не имя графы журнала.
● Ввод нового объекта или записи без использования отбора – значение параметра равно Неопределено.
● Ввод нового объекта или записи с помощью глобальной команды – значение параметра равно Неопределено.
● Программное выполнение методов ОткрытьФорму()/ПолучитьФорму() – в случае, если исполнение методов ОткрытьФорму()/ПолучитьФорму() приводит к созданию формы нового объекта, в качестве значения параметра обработчика ДанныеЗаполнения будет передано значение (типа Структура) параметра формы ЗначенияЗаполнения. Если параметр ЗначенияЗаполнения не задан в параметрах формы, то значение параметра обработчика будет равно Неопределено.
● Программный вызов метода объекта Заполнить() – в качестве значения параметра передается та информация, которая передана в качестве параметра метода Заполнить().
Операция интерактивного создания нового объекта с помощью копирования обрабатывается в обработчике события ПриКопировании соответствующего объекта. При обработке создания нового объекта копированием следует помнить о том, что реквизиты типа ХранилищеЗначения не будут автоматически перенесены в создаваемый объект. Перенос таких данных следует явно описывать в обработчике события ПриКопировании создаваемого объекта.
На заполнение реквизитов из данных заполнения оказывает влияние свойство Заполнять из данных заполнения реквизита объекта метаданных. Если это свойство имеет значение Истина, то реквизиты будут заполняться системой из данных заполнения автоматически. Если свойство имеет значение Ложь или в данных заполнения нет необходимого значения, то система будет пытаться заполнить реквизит из свойства Значение заполнения.
ВНИМАНИЕ! Разработчик может управлять заполнением стандартных реквизитов объектов наравне с самостоятельно созданными реквизитами. Например, можно запретить заполнение стандартного реквизита Родитель, и тогда он не будет автоматически заполняться текущей группой.
Если после исполнения обработчика ОбработкаЗаполнения() параметр СтандартнаяОбработка равен значению Истина, то система автоматически заполнит те реквизиты (включая стандартные), для которых в метаданных установлены свойства Заполнять из данных заполнения или Значение заполнения и которые не заполнены в обработчике (значение равно значению по умолчанию для типа реквизита). Свойство Заполнять из данных заполнения автоматически устанавливается системой для некоторых стандартных реквизитов ряда объектов:
● для справочников – реквизиты Родитель и Владелец;
● для планов счетов, планов видов характеристик и планов видов расчета – реквизит Родитель;
● для регистра сведений – ведущие измерения;
● для стандартных реквизитов остальных объектов данное свойство автоматически не устанавливается.
При этом данные для стандартного заполнения берутся системой из одноименных реквизитов данных, передающихся в параметре ДанныеЗаполнения.
Данные заполнения передаются в создаваемую форму объекта в качестве стандартного параметра формы ЗначенияЗаполнения и передаются из этого параметра расширением формы для заполнения объекту. Также имеется возможность программно задать параметр формы ЗначенияЗаполнения нового объекта, при этом будут выполнены все действия, которые исполняются при интерактивном создании объекта.
При программном создании нового объекта обработка заполнения системой автоматически не вызывается. Для вызова обработчика заполнения существует метод Заполнить().
Значение заполнения – это свойство реквизита объекта метаданных, позволяющее задать значение по умолчанию, которое может принимать реквизит при интерактивном создании объекта.
ВНИМАНИЕ! Заполнение реквизитов из свойства Значение заполнения происходит после вызова обработчика ОбработкаЗаполнения(). Реквизит будет заполнен в том случае, если его значение не заполнено ранее (в обработчике ОбработкаЗаполнения() или механизмом стандартного заполнения).
Тип значения заполнения совпадает с типом реквизита. При этом в качестве значения этого свойства можно указывать значения примитивных типов или предопределенные данные.
5.6.11. Проверка заполнения реквизитов
5.6.11.1. Общая информация
В информационной системе данные могут вноситься множеством различных способов, и часто они могут быть некорректны. Поэтому при разработке решения бывает необходимо прилагать много усилий на реализацию проверки правильности вводимых данных и уведомления пользователя о некорректности введенной информации.
Механизм проверки заполнения позволяет существенно упростить процесс разработки конфигураций.
Платформа поддерживает автоматическую проверку указанных реквизитов прикладных объектов и форм, а также позволяет выполнить процесс проверки в модуле. Для управления проверкой заполнения реквизита служит свойство Проверка заполнения. Если свойство установлено в значение Не проверять – платформа не проверяет заполнение реквизита. Значение Выдавать ошибку указывает на необходимость выполнять проверку.
Платформа выполняет автоматическую проверку заполнения:
● констант;
● справочников, документов, отчетов, обработок, планов видов характеристик, планов счетов, планов видов расчета, бизнес-процессов, задач:
● реквизитов и стандартных реквизитов,
● табличных частей,
● реквизитов и стандартных реквизитов табличных частей;
● наборов записей регистров бухгалтерии, регистра сведений, регистра накопления, регистра расчета, перерасчетов, последовательностей:
● измерений,
● ресурсов,
● реквизитов и стандартных реквизитов;
● реквизитов форм;
● реквизитов форм отчетов;
● реквизитов форм обработок.
Примечание. Проверка заполнения реквизитов выполняется аналогично функции ЗначениеЗаполнено(). Проверка заполнения табличных частей подразумевает, что табличная часть считается заполненной, когда в ней присутствует хотя бы одна строка.
Проверка заполнения может быть вызвана двумя способами:
● вызовом метода ПроверитьЗаполнения() (у объекта или формы);
● автоматически.
ВНИМАНИЕ! Если свойство конфигурации Режим совместимости установлено в значение Версия 8.1, то автоматическая проверка заполнения не работает.
5.6.11.2. Установки по умолчанию
Свойство реквизита Проверка заполнения по умолчанию устанавливается в значение Выдавать ошибку для следующих стандартных реквизитов:
● ПланОбмена – Наименование;
● Справочник – Владелец, Наименование;
● Документ – Дата;
● ПланВидовХарактеристик – Наименование;
● ПланСчетов – Код, Наименование;
● ПланСчетов.ВидыСубконто – ВидСубконто;
● ПланВидовРасчета – Наименование;
● ПланВидовРасчета.ВедущиеВидыРасчета – ВидРасчета;
● ПланВидовРасчета.БазовыеВидыРасчета – ВидРасчета;
● ПланВидовРасчета.ВытесняющиеВидыРасчета – ВидРасчета;
● РегистрСведений – Период;
● РегистрНакопления – Период;
● РегистрБухгалтерии – Период;
● РегистрРасчета – ПериодРегистрации, ВидРасчета, ПериодДействияНачало, ПериодДействияКонец;
● БизнесПроцесс – Дата;
● Задача – Наименование.
5.6.11.3. Порядок работы
Автоматическая проверка заполнения вызывается расширением формы перед интерактивной записью всех объектов, кроме документов, бизнес-процессов, отчетов и обработок. Для этих объектов определено следующее поведение:
● для документов:
● проверка заполнения вызывается расширением формы перед проведением, если свойство Проведение установлено в значение Разрешить;
● проверка заполнения вызывается расширением формы перед записью, если свойство Проведение установлено в значение Запретить;
● для бизнес-процессов проверка заполнения вызывается расширением формы перед стартом;
● для отчетов проверка заполнения вызывается расширением формы при нажатии кнопки Сформировать;
● для обработок проверка заполнения вызывается расширением формы в случаях, если нажаты кнопки, связанные со стандартными командами формы OK, Да, Повторить, Пропустить.
Если реквизит является основным реквизитом формы следующих типов: СправочникОбъект, ДокументОбъект, ОтчетОбъект, ПланВидовХарактеристикОбъект, ПланСчетовОбъект, ПланВидовРасчетовОбъект, БизнесПроцессОбъект, ЗадачаОбъект, то для значения такого реквизита также будет вызвана проверка заполнения.
Для вызова проверки заполнения системой необходимо, чтобы у формы (с которой происходит работа) было установлено свойство Проверять заполнение автоматически. В этом случае вначале будет вызван обработчик ОбработкаПроверкиЗаполненияНаСервере() формы, а затем обработчик ОбработкаПроверкиЗаполнения() модуля объекта.
ВНИМАНИЕ! Если у формы свойство Проверять заполнение автоматически установлено в значение Истина при выполнении стандартных команд Записать (Провести для документов и т. д.), а также стандартных команд формы OK, Да, Повторить, Пропустить, будет вызван метод ПроверитьЗаполнение(). В противном случае проверка заполнения не вызывается ни для формы, ни для объекта.
Процесс проверки заполнения происходит следующим образом:
● Формируется список имен реквизитов формы, для которых возможна проверка заполнения и для которых свойство ПроверкаЗаполнения установлено в значение ВыдаватьОшибку. В этот список не будут включены имена реквизитов, тип которых не поддерживает проверку заполнения (например, СправочникОбъект), но будет включено имя основного реквизита формы.
В автоматически формируемый список реквизитов не будут включены реквизиты формы, отключенные с помощью функциональных опций.
● Вызывается обработчик события формы ОбработкаПроверкиЗаполненияНаСервере, в котором разработчик может описать свой алгоритм проверки заполнения или изменить состав проверяемых реквизитов. В обработчик будет передан сформированный список имен реквизитов. Если в обработчике необходимо добавить к списку какие-либо реквизиты, это можно сделать только для реквизитов вышеперечисленных типов (для которых возможна проверка заполнения в форме) и основного реквизита. Добавление в список имен реквизитов объектного типа (например, СправочникОбъект) вызовет исключение при дальнейшей автоматической проверке. Добавление в список имени несуществующего реквизита вызовет исключение при дальнейшей автоматической проверке.
● После завершения работы обработчика события механизм проверки заполнения получает обратно список имен, проверяемых реквизитом (который, возможно, был изменен в обработчике). Система анализирует список реквизитов и проверяет заполненность каждого реквизита. Если реквизит является основным реквизитом объектного типа (например, Объект типа СправочникОбъект), будет вызвана проверка заполнения самого объекта. Если реквизит является реквизитом объектного типа, но не основным, будет вызвано исключение.
Разработчик имеет возможность влиять на процесс проверки путем определения в модуле объекта, набора записей и в модуле формы обработчика события ОбработкаПроверкиЗаполнения.
Определив обработчик события, разработчик получает полный контроль над проверкой заполнения. В параметре ПроверяемыеРеквизиты обработчик получает массив реквизитов, для которых в режиме Конфигуратор указано, что они должны проверяться. Разработчик может произвольно модифицировать этот массив:
● удалять те реквизиты, проверку заполнения которых он реализует сам или считает, что их не нужно проверять в данный момент;
● добавлять необходимые реквизиты, для которых должна выполниться проверка заполнения.
В случае если разработчика не устраивает стандартная процедура проверки, он может написать алгоритм проверки сам и, используя объект СообщениеПользователю, сообщить об имеющихся проблемах пользователю.
Если в процессе проверки разработчик вывел пользователю сообщения об ошибках, необходимо установить параметр Отказ в значение Истина, чтобы уведомить платформу о том, что текущее действие не может быть завершено.
Параметр события ПроверяемыеРеквизиты содержит имена атрибутов в следующем формате:
● для реквизитов и констант – ИмяРеквизита, например, Поставщик;
● для табличных частей – ИмяТабличнойЧасти, например, Товары;
● для реквизитов табличных частей – ИмяТабличнойЧасти.ИмяРеквизита, например, Товары.Номенклатура;
● для реквизитов форм – ИмяРеквизита, например, ДокументОбъект.
Для реквизитов, входящих в состав функциональных опций (см. здесь) без параметров, значение опции учитывается при проверке заполнения. Если функциональная опция включена, то реквизит будет включен в список проверяемых реквизитов; если опция выключена, реквизит не будет включен в список проверяемых реквизитов. Это значит, что отключенное поле не будет передано через параметры ПроверяемыеРеквизиты в ОбработкаПроверкиЗаполнения.
Реквизиты, входящие в состав функциональной опции с параметрами (см. здесь), всегда включаются в список проверяемых реквизитов (параметр ПроверяемыеРеквизиты). Удаление реквизита из списка проверяемых реквизитов в таких случаях необходимо выполнять в обработчике ОбработкаПроверкиЗаполнения. Для этого следует получить значение функциональной опции, указав в качестве параметров необходимые данные объекта.
5.6.11.4. Правила отображения отметки незаполненного
На отображение отметки незаполненного влияют следующие свойства элементов конфигурации:
● свойство Проверка заполнения реквизита или стандартного реквизита объекта метаданных;
● свойство Проверка заполнения реквизита формы;
● свойство Автоотметка незаполненного элемента формы;
● свойство ОтметкаНезаполненного элемента формы (доступно только для программного изменения).
Свойство элемента формы Автоотметка незаполненного может быть установлено в значение:
● Авто – отметка будет отображаться, если у реквизита формы или реквизита (стандартного реквизита) объекта метаданных свойство Проверка заполнения установлено в значение Выдавать ошибку и реквизит, связанный с элементом формы, содержит пустое значение.
● Да – отметка будет отображаться для незаполненного элемента вне зависимости от того, в каком состоянии находится свойство Проверка заполнения.
● Нет – отметка не будет отображаться для незаполненного элемента вне зависимости от того, в каком состоянии находится свойство Проверка заполнения.
При начале интерактивного изменения поля ввода отметка незаполненного перестает отображаться, при этом значение свойства ОтметкаНезаполненного не изменяется. Отображение отметки восстанавливается (если это необходимо) после того, как в поле ввода завершено интерактивное редактирование или установлено значение. При этом свойство ОтметкаНезаполненного может быть изменено системой в том случае, если свойство АвтоОтметкаНезаполненного установлено в значение Истина:
● если значение в поле не заполнено, то свойство ОтметкаНезаполненного будет установлено в значение Истина;
● если в поле значение заполнено, то свойство ОтметкаНезаполненного будет установлено в значение Ложь.
Примечание. Если свойство ОтметкаНезаполненного установлено у таблицы, то для таблицы, в которой нет строк, будет подсвечена первая строка, а для заполненной таблицы – все строки.
Кроме того, отметка незаполненного также будет отображена, если в окне сообщений есть сообщение (см. здесь), связанное с конкретным полем формы, вне зависимости от установленных свойств элемента формы и связанных с ним реквизитов. После очистки окна сообщений отметка незаполненного снимается у тех элементов формы, значение свойства ОтметкаНезаполненного которых равно значению Ложь.
5.6.12. Индексирование реквизитов объектов
Большинство прикладных объектов конфигурации имеют в составе подчиненных объектов группу Реквизиты. В этой группе указываются дополнительные характеристики объектов.
В режиме 1С:Предприятие часто требуется осуществлять отбор данных по значению какого-либо реквизита или сортировать списки данных по реквизитам. Средства «1С:Предприятия» позволяют выполнить подобную задачу, однако если данных достаточно много, такая задача может выполняться долго.
Чтобы ускорить эту работу, следует реквизитам, по которым будет выполняться отбор или сортировка, устанавливать свойство Индексировать. Если свойство установлено (выбрано значение Индексировать или Индексировать с доп. упорядочиванием), то подобные задачи будут выполняться эффективнее. Для примитивных типов реквизитов указание индексирования предоставляет пользователям средство сортировки списка по щелчку мыши в области заголовка колонки.
Наряду с сортировкой по реквизиту или отбором данных по значению какого-либо реквизита часто требуется, чтобы в результирующем списке данные были дополнительно отсортированы по основному представлению (наименованию или коду), т. е. в пределах одного значения реквизита записи были отсортированы по представлению. Добиться правильного результата можно, если выбрано значение индексирования Индексировать, а в условиях сортировки списка указаны реквизит и представление.
Если возникает необходимость минимизации времени таких отборов или сортировки, то для реквизита следует выбрать значение индексирования Индексировать с доп. упорядочиванием (если выбор такого значения возможен).
ВНИМАНИЕ! Механизм дополнительного упорядочивания будет эффективно использоваться только в том случае, когда в режиме 1С:Предприятие в условиях сортировки списка указан определенный порядок сортировки: сначала по реквизиту, а затем по представлению.
Если такие условия сортировки не задаются, то использование значения Индексировать с доп. упорядочиванием не имеет смысла, т. к. оно будет эквивалентно обычному индексированию, однако размер индекса при этом будет больше.
Индексирование с дополнительным упорядочиванием используется для реквизитов справочников, документов, планов видов характеристик, планов счетов, планов видов расчетов.
Для реквизитов регистров допускается использование обычного индексирования.
5.6.13. Права
Права доступа к объектам конфигурации можно редактировать как с помощью редактора прав доступа ролей (см. здесь), так и с помощью окна редактирования объекта (см. здесь).
В окне редактирования объекта выполняется настройка прав доступа для данного объекта во всех ролях, которые существуют в системе.
Имеется возможность задавать права доступа:
● для собственно объектов метаданных,
● табличных частей,
● реквизитов объектов.
5.6.14. Быстрый выбор
За способ выбора объектов при заполнении полей ввода отвечают свойства Способ выбора и Быстрый выбор.
Свойство Быстрый выбор отвечает за режим выбора по умолчанию. Свойство доступно только в том случае, если свойство Способ выбора имеет значение Обоими способами. Покажем работу свойств Быстрый выбор на примере.
Допустим, у нас есть справочник Склады. У него свойство Способ выбора равно Обоими способами, а также установлено свойство Быстрый выбор. В этом случае по умолчанию выбор из значений справочника Склады во всей конфигурации будет осуществляться в режиме быстрого выбора. Если отключить свойство Быстрый выбор, то выбор по умолчанию станет Из формы.
Также имеется возможность явного переопределения режима выбора для реквизита объекта метаданных и/или элемента формы. Для этого достаточно изменить значение Авто свойства Быстрый выбор на значение Использовать – для разрешения быстрого выбора или Не использовать – для запрещения быстрого выбора. По умолчанию свойство Быстрый выбор реквизита объекта метаданных и элемента формы установлено в значение Авто.
Таким образом, получается трехуровневая схема управления режимом выбора:
1. Вначале платформа анализирует свойство Быстрый выбор элемента формы.
2. Если свойство равно Авто, то оно анализируется у реквизита объекта.
3. В случае равенства Авто выполняется анализ свойств Способ выбора и Быстрый выбор прикладного объекта, соответствующего типу реквизита. Если на каком-то из первых двух уровней (элемент формы и реквизит объекта) значение свойства Быстрый выбор отлично от Авто, анализ прекращается и выполняется выбор в определенном режиме.
Примечание. Если свойство Способ выбора прикладного объекта равно Из формы или Быстрый выбор (но только не Обоими способами), то установка свойств Быстрый выбор реквизита и элемента формы никак не влияет на способ выбора.
5.6.15. История выбора при вводе
В том случае, если поле ввода формы связано с данными ссылочного типа (справочники, документы, перечисления, бизнес-процессы, задачи, планы видов характеристик, планы видов расчета, планы счетов и планы обмена), для него доступно управление отображением и формированием истории выбора при вводе. Управление основано на значении свойства ИсторияВыбораПриВводе, которое присутствует в свойствах объекта конфигурации, реквизита объекта конфигурации и поля ввода управляемой формы.
Управление историей выбора реализовано с помощью трехуровневой схемы управления:
1. Вначале платформа анализирует свойство ИсторияВыбораПриВводе для поля ввода формы.
2. Если значение свойства равно Авто, то выполняется анализ свойства ИсторияВыбораПриВводе у реквизита, отображаемого полем ввода.
3. Если значение свойства равно Авто, выполняется анализ свойства ИсторияВыбораПриВводе у объекта конфигурации, соответствующего типу реквизита.
Значение свойства ИсторияВыбораПриВводе может принимать значение Авто и Не использовать. В том случае, если свойство имеет значение Авто на всех «уровнях» принятия решения, то история выбора будет отображаться и сохраняться при условии выполнения всех следующих условий:
● Поле ввода отображает значение ссылочного типа;
● Не установлен режим выбора из списка;
● Не используется быстрый выбор (см. здесь).
Во всех остальных случаях история выбора не будет сохраняться и отображаться.
История выбора состоит из 7 значений:
● Не более 5 наиболее часто используемых значений;
● Последние выбранные значения в таком количестве, чтобы общий список не превышал 7 элементов.
Если значение из последних выбранных присутствует в списке часто используемых значений, то отображается предыдущее выбранное значение. Если в поле ввода все выбранные значения примерно равновероятны, то в истории выбора отображаются только не более 7 последних выбранных значений. При определении частоты использования учитывается как частота выбора значения, так и время, прошедшее с момента выбора.
5.6.16. Создание нового элемента при вводе
В том случае, если поле ввода формы связано с данными ссылочного типа (справочники, документы, перечисления, бизнес-процессы, задачи, планы видов характеристик, планы видов расчета, планы счетов и планы обмена), для него доступно управление созданием нового элемента из поля ввода. Управление основано на значении свойства СозданиеПриВводе, которое присутствует в свойствах объекта конфигурации, реквизита объекта конфигурации и поля ввода управляемой формы.
Управление возможностью создания элемента из выпадающего списка реализовано с помощью трехуровневой схемы управления:
1. Вначале платформа анализирует свойство КнопкаСоздания для поля ввода формы.
2. Если значение свойства равно Авто, то выполняется анализ свойства СозданиеПриВводе у реквизита, отображаемого полем ввода.
3. Если значение свойства равно Авто, выполняется анализ свойства СозданиеПриВводе у объекта конфигурации, соответствующего типу реквизита.
Анализ прекращается после того, как на каком-то из уровней обнаружено значение свойство, отличное от значения Авто.
В том случае, если создание элемента из поля ввода необходимо выполнить особым образом, разработчик должен обработать событие Создание. Событие возникает при нажатии кнопки создания в выпадающем списке.
Если в обработчике данного события параметр СтандартнаяОбработка установлен в значение Ложь, то система не будет выполнять никаких действий, и ожидается, что открытие формы нового элемента разработчик выполнит самостоятельно. Если параметр СтандартнаяОбработка установлен в значение Истина, то система выполнит открытие основной формы объекта, при этом в форму будут переданы следующие параметры:
● РежимВыбора, тип Булево, значение – Истина. Признак того, что форма находится в режиме выбора.
● ТекстЗаполнения, тип Строка. Параметр содержит текст, введенный в поле ввода перед нажатием кнопки создания нового элемента.
● ЗначенияЗаполнения, тип Структура. Параметры заполнения для создаваемого объекта. Структура заполняется из параметров выбора и связей параметров выбора. В структуру попадают только те значения, имена которых начинаются с текста Отбор..
● ПараметрыВыбора, тип Структура. Значение параметра является полной копией параметра ЗначенияЗаполнения.
● ДополнительныеПараметры, тип Структура. Дополнительные параметры, которые прикладной разработчик считает нужным передать в форму объекта. Структура заполняется из параметров выбора и связей параметров выбора. В структуру попадают только те значения, имена которых начинаются с текста Дополнительно..
Владельцем открываемой формы нового объекта будет выступать поле ввода, откуда вызвано создание объекта.
Параметры выбора (см. здесь) и связи параметров выбора (см. здесь) ограничивают список существующих элементов, которые могут быть выбраны в поле ввода. Для того чтобы создаваемый из поля ввода элемент также соответствовал наложенным органичениям, существует специальный механизм:
● При открытии формы нового объекта, которая инициирована из поля ввода, значение параметра формы ПараметрыВыбора копируются в одноименное свойство управлемой формы.
● Если создание элемента выполняется в режиме выбора (свойство управлемой формы РежимВыбора установлено в значение Истина), то перед вызовом обработчика события управляемой формы ПослеЗаписиНаСервере выполняется проверка соответствия реквизитов созданного объекта требуемым параметрам (свойство формы ПараметрыВыбора). По результатам проверки устанавливается свойство управляемой формы ВыборДоступен.
● Перед закрытием формы (перед вызовом обработчика события ПриЗакрытии) вызывается обработчик события ВыборЗначения. По результатам вызова обработчика (значение параметра СтандартнаяОбработка) и свойства ВыборДоступен, принимается решение о дальнейших действиях:
● Обработчик события ВыборЗначения не задан, или обработчик задан, а параметр СтандартнаяОбработка после работы обработчика установлен в значение Истина:
● Значение свойства ВыборДоступен установлено в значение Истина – выполняется выбор созданного элемента;
● Значение свойства ВыборДоступен установлено в значение Ложь – формируется сообщение о том, что созданный элемент не соответствует параметрам выбора, и выбор созданного элемента не выполняется.
● Обработчик события ВыборЗначения задан и после работы обработчика параметр СтандартнаяОбработка установлен в значение Ложь – выбор созданного элемента не выполняется, сообщение не формируется. Разработчик должен самостоятельно выполнить необходимые действия: выдать диагностическое сообщение, установить в поле ввода значение по умолчанию и т. д.
Если выполняется выбор созданного элемента, то:
● Форма элемента закрывается;
● Для поля ввода, из выпадающего списка которого вызвано создание элемента, вызывается событие ОбработкаВыбора.
Если выбор созданного элемента не выполняется, то форма элемента закрывается, более никаких действий не выполняется.
5.6.17. Связи параметров выбора
Связи параметров выбора – данное свойство позволяет указать список реквизитов, которые будут поставлять значения, используемые при выборе значения реквизита, при открытии формы выбора, при отображении списка быстрого выбора и при выполнении ввода по строке.
В качестве примера можно привести выбор договора с контрагентом. Вначале осуществляется выбор контрагента, а затем выполняется выбор договора только из списка договоров выбранного контрагента. Причем отбор автоматически изменяется при смене контрагента.
Для того чтобы ограничить выбор, реквизиту в свойстве Связи параметров выбора устанавливается соответствие имени реквизита, по которому будет выполняться фильтрация выбираемых значений, и реквизита, из которого будет браться значение фильтрации.

Рис. 136. Связи параметров выбора
Значения, указанные в данном свойстве, будут переданы в открываемую форму через структуру Параметры (см. здесь). При этом значение колонки Имя будет соответствовать ключу элемента структуры, а значение реквизита, указанное в колонке Реквизит, – значению элемента структуры. Если в колонке Имя указано значение вида Отбор.Владелец, то будет создан параметр формы Отбор (типа Структура). В этой структуре будет создан элемент с ключом Код и значением, полученным из реквизита, указанного в колонке Реквизит (в нашем примере – Поставщик).
Если имя у какого-либо элемента свойства Связи параметров выбора совпадает с именем какого-либо элемента свойства Параметры выбора (см. здесь), то приоритет отдается элементу из свойства Связи параметров выбора в том случае, если значение поля, указанного в элементе Связи параметров выбора, переданное в функцию ЗначениеЗаполнено(), возвращает Истина. При этом элемент из свойства Параметры выбора игнорируется.
Также в окне редактирования связей параметров выбора можно задать режим очистки поля при изменении полей связи. Если значение свойства Режим изменения связанного значения равно Очищать, то поле будет очищено при интерактивном изменении значения связи (изменением считается также повторный выбор значения, ранее находившегося в поле) до наступления события ПриИзменении. В противном случае (значение свойства равно Не изменять) поле не будет очищено. Очистка происходит вне зависимости от реального изменения значения в элементе связи и выполняется до вызова обработчика события ПриИзменении.
Если поле отображает данные таблицы (колонка таблицы или отдельное поле, связанное с текущими данными), то очистка такого поля производится, если источником данных для таблицы формы является ДанныеФормаКоллекция или ДанныеФормыСтруктураСКоллекцией. Если реквизит, который нужно очистить, связан с табличными данными, а реквизит связи не является табличными данными, то очищаются значения во всех строках таблицы, где расположен реквизит, для которого выполнена настройка связей параметров выбора. Реквизит не может быть очищен, если он связан с колонкой реквизита типа ДинамическийСписок.
Для стандартного реквизита Родитель подчиненного справочника возможна ситуация, когда свойство Связи параметров выбора будет изменено системой автоматически. Это изменение происходит в следующих случаях:
● когда у справочника изменяется состояние подчиненности;
● когда у справочника изменяется значение свойства Иерархический справочник.
Это изменение происходит следующим образом:
● если справочник является подчиненным и иерархическим, то для реквизита Родитель в свойство Связи параметров выбора добавляется параметр Имя: Отбор.Владелец – Реквизит: Владелец;
● в противном случае параметр Имя: Отбор.Владелец – Реквизит: Владелец удаляется из списка параметров свойства Связи параметров выбора стандартного реквизита Родитель.
Рассмотрим пример: на форме есть поле Поставщик и поле РасчетныйСчетПоставщика. Для поля РасчетныйСчетПоставщика свойство СвязиПараметровВыбора установлено в значение Объект.Поставщик, которое будет устанавливаться в поле отбора Владелец.

Рис. 137. Очистка связанных элементов формы
Тогда при интерактивном изменении значения поля Поставщик будет происходить автоматическая очистка значения поля РасчетныйСчетПоcтавщика.
5.6.18. Параметры выбора
Параметры выбора – данное свойство позволяет указать значения параметров, которые будут применяться при выборе значения реквизита. Параметры выбора будут выполняться при открытии формы выбора, при отображении списка быстрого выбора и при выполнении ввода по строке. Например, необходимо ограничить выбор только теми товарами, у которых реквизит Вид равен значению Перечисление.ВидыТоваров.Услуга. Для конкретного значения отбора можно указать список значений. Для этого при редактировании колонки Значение следует выбрать тип Фиксированный массив.

Рис. 138. Параметры выбора
Значения, указанные в данном свойстве, будут переданы в открываемую форму через структуру Параметры. При этом значение колонки Имя будет соответствовать ключу элемента структуры, а колонка Значение – значению элемента структуры. Если в колонке Имя указано значение вида Отбор.Код, то будет создан параметр формы Отбор (типа Структура). В этой структуре будет создан элемент с ключом Код и значением Значение.
Если имя у какого-либо параметра свойства Связи параметров выбора (см. здесь) совпадает с именем какого-либо параметра свойства Параметры выбора, то приоритет отдается элементу из свойства Связи параметров выбора (параметр из свойства Параметры выбора игнорируется). Приоритет будет отдан в том случае, если значение поля, указанного в параметре Реквизит свойства Связи параметров выбора, является заполненным (функция ЗначениеЗаполнено() для этого значения возвращает значение Истина).
Примечание. Значения, указанные в свойстве реквизита Параметры выбора, также используются динамическим списком и системой компоновки данных.
При выборе значения субконто в ячейке таблицы, связанной с набором записей регистра бухгалтерии, автоматически устанавливается параметр выбора для поля Владелец, только если данный вид субконто имеет тип справочника дополнительных значений субконто. Значением параметра выбора является соответствующий вид субконто.
5.6.19. Прочее
Свойство Использовать стандартные команды определяет возможность включения стандартных команд (например, команды открытия списка справочника) этого объекта в командный интерфейс. Если свойство имеет значение Ложь, то стандартные команды не будут отображаться системой, и включить объект в интерфейс можно только с помощью команды, созданной в конфигураторе.
Свойство Форма выбора устанавливает форму, которая будет применяться для выбора значения реквизита. Используется для реквизитов, тип которых образован объектом метаданных, имеющим понятие форма. Например, у справочника Товары есть несколько форм выбора, при этом для стандартного реквизита Родитель необходимо использовать особую форму. Для реализации такого поведения нужно указать эту особую форму в свойстве Форма выбора стандартного реквизита Родитель (подробнее про стандартные реквизиты см. здесь).
Формат – для типов Число, Булево, Дата позволяет задать формат, с помощью которого при выводе будут отображаться данные реквизита.
Формат редактирования – свойство позволяет задать формат редактирования данных типов Число, Булево, Дата.
Связь по типу – устанавливает связь с реквизитом, ограничивая тип вводимых значений для поля ввода. Настройка связи по типу имеет смысл для реквизитов с составным типом данных, логически связанных с другим реквизитом типа ПланВидовХарактеристик.Ссылка, в том числе для связи реквизита, содержащего субконто с реквизитом, который содержит значение типа Ссылка на план счетов. Элемент связи по типу содержит номер вида субконто для случая, если реквизит, с которым выбрана связь по типу, имеет значение типа Ссылка на план счетов.
Например, есть два реквизита – ВидХарактеристики и Характеристика. У реквизита ВидХарактеристики – тип ПланВидовХарактеристикВидыХарактеристикТоваров.Ссылка; у реквизита Характеристика – тип Характеристика.ВидыХарактеристикТоваров. В свойствах реквизита Характеристика можно установить свойство Связь по типу – ВидХарактеристики. Тогда тип выбираемого значения будет определяться типом, который задан для выбранного значения плана видов характеристик.
5.7. Константы
5.7.1. Общая информация
В системе «1С:Предприятие» константы предназначены для хранения постоянной или условно-постоянной информации. Такая информация либо совсем не изменяется в процессе деятельности предприятия, либо изменяется достаточно редко. Наиболее простой пример подобной информации – название организации, которое, как правило, не меняется.
Основная причина использования констант заключается в том, что в них один раз заносится какая-либо информация, которая затем может использоваться при формировании документов, в расчетах, при построении отчетных форм. Значение константы время от времени может редактироваться.
Рассмотрим такой пример. Наиболее часто на документах предприятия встречается подпись директора и главного бухгалтера. Естественно, что эти должностные лица должны самостоятельно ставить подписи. Но помимо самой подписи в документах требуется ее расшифровка – фамилия подписавшего документ. Конечно, можно ввести фамилии директора и главного бухгалтера непосредственно в формы документов. Но если какая-либо из фамилий изменится, то придется вновь редактировать все бланки документов и исправлять фамилии. Поэтому гораздо удобнее создать в конфигурации две константы – для хранения фамилий директора и главного бухгалтера, ввести эти фамилии в константы один раз, а в многочисленных бланках документов использовать имена констант для получения их значений. При смене директора или главного бухгалтера достаточно внести изменения только в константы – ввести в них новые фамилии, и все изменения автоматически будут отражены в тех местах, где эти константы используются.
ВНИМАНИЕ! При изменении значения константы прежнее значение теряется. Для получения прежних значений данных вместо константы нужно использовать регистр сведений без измерений.
Конфигуратор системы «1С:Предприятие» позволяет создавать практически неограниченное количество констант для хранения любой нужной информации.
5.7.2. Свойства константы
Для работы с константами предназначена ветвь Константы дерева конфигурации.
Свойства константы редактируются в палитре свойств. Необходимо обратить внимание, что константа является типизированным объектом конфигурации.
Тип – указывается тип константы. Тип константы может быть любым из стандартных типов конфигурации (Дата, Число, СправочникСсылка, ДокументСсылка и т. д.) или составным (состоящим из набора различных типов).
В зависимости от выбранного типа палитра свойств может содержать дополнительные свойства, уточняющие выбранный тип.
Если форму редактирования константы необходимо показать в командном интерфейсе, то следует установить свойство Использовать стандартные команды. В этом случае команда открытия редактора константы будет отображена в тех подсистемах, к которым отнесена константа. Форма редактирования константы задается с помощью свойства Основная форма (подробнее см. здесь).
Формы для ввода констант создаются в ветви Общие формы (см. здесь).
5.8. Справочники
5.8.1. Общая информация
При заполнении бланка какого-либо документа часто требуется указывать информацию, выбирая значение из заранее заданного списка.
Возьмем в качестве примера анкету, которую требуется заполнять при поступлении на работу.
При заполнении графы Место рождения необходимо указать населенный пункт. Хотя общее количество населенных пунктов достаточно большое, список всех населенных пунктов все-таки ограничен. Фактически место рождения можно указать, выбрав из подобного списка нужный населенный пункт. Такой список и представляет собой справочник.
Таким образом, можно сказать, что справочник является списком возможных значений того или иного реквизита документа (в широком смысле слова «документ»).
Справочники используются в тех случаях, когда необходимо исключить неоднозначный ввод информации.
Например, для того, чтобы покупатель, продавец, кладовщик, директор понимали, о каком товаре идет речь, каждый должен называть его одинаково. И в этом случае необходим справочник. Обычно в торговом предприятии он имеет вид прайс-листа, а если такой справочник хранится в компьютере, то в него заносят всю возможную номенклатуру товаров, с которыми работает торговая фирма.
Система «1С:Предприятие» позволяет вести практически неограниченное количество необходимых справочников. Каждый справочник представляет собой список однородных экземпляров объектов: сотрудников, организаций, товаров и т. д. Каждый такой экземпляр объекта будем называть элементом справочника.
Следует иметь в виду, что в конфигурации создается структура справочника, а собственно его содержимое – элементы справочника – вводится пользователем при работе с программой. В процессе конфигурирования описывается структура информации, которая будет храниться в справочнике, разрабатывается экранное и, если необходимо, печатное представление справочника, задаются различные особенности его «поведения».
Как правило, справочники имеют стандартные реквизиты код и наименование, при этом код может иметь тип Число или Строка.
Система «1С:Предприятие» предоставляет широкие возможности по работе с кодами элементов справочника: автоматическое присвоение кодов, автоматический контроль уникальности кода и другие.
Справочник в системе «1С:Предприятие» может быть иерархическим. Существуют два вида иерархии: иерархия групп и элементов и иерархия элементов. В первом случае все данные справочника будут разделяться на два вида: «просто» элементы справочника и группы справочника. Группы – это логическое объединение элементов справочника. Примером иерархического справочника может служить справочник товаров, где группами являются виды товаров («Сантехника», «Бытовая химия» и т. д.), а элементами – конкретные товары («Смеситель», «Зеркало», «Стиральный порошок»).
Использование иерархических справочников позволяет организовать ввод информации в справочник с нужной степенью детализации. Элементы и группы элементов в иерархическом справочнике можно переносить из одной группы в другую.
Для справочников с видом иерархии Иерархия элементов группы как самостоятельный вид отсутствуют. Их роль выполняют сами элементы. Отличительной особенностью таких справочников является функциональность всех элементов. Примером справочника данного вида может служить справочник подразделений. Каждое подразделение описывается одинаковым набором реквизитов и при этом логически может содержать другое подразделение или входить в него.
Для иерархических справочников конфигуратор позволяет установить ограничение числа уровней справочников, или допускается неограниченное число уровней вложенности.
Помимо кода и наименования для справочника можно создать набор реквизитов, позволяющих хранить дополнительную информацию об элементе справочника.
Например, справочник Контрагенты может содержать такие сведения, как полное наименование контрагента, его ИНН, фамилии директора и главного бухгалтера и другую информацию.
Если объект предметной области, которой соответствует справочник, имеет не только такие «простые» свойства, например, полное наименование или ИНН, но и составные (списочные) свойства, справочнику может быть создан набор табличных частей.
Например, в справочнике Контрагенты может быть создана табличная часть для списка телефонных номеров контрагента.
Имена реквизитов справочника не должны совпадать ни с одним именем реквизита из какой-либо табличной части.
Для работы с информацией, хранящейся в справочнике, можно создать экранные формы. Могут быть созданы отдельные формы для просмотра списка элементов справочника, для редактирования элемента справочника, формы для выбора из справочника нужного элемента.
Конфигуратор позволяет создать несколько форм одного типа, например, формы для выбора из справочника нужного элемента, и использовать разные формы в разных случаях.
Рекомендуется создавать разные формы для отображения списка элементов и для выбора элементов справочника.
5.8.2. Свойства справочника
Для работы со справочниками предназначена ветвь Справочники дерева конфигурации.
При создании нового справочника открывается окно редактирования объекта (см. здесь).
Иерархический справочник – если свойство установлено, то справочник имеет иерархическую структуру и становится доступным свойство Вид иерархии и Ограничение количества уровней иерархии.
Вид иерархии – определяется, какой вид иерархии используется в данном справочнике. При выборе вида Иерархия групп и элементов для справочника определяются два вида элементов: группы и элементы. Группы предназначены только для объединения других групп и элементов справочника. Обычно для описания группы достаточно кода, наименования и родителя (ссылка на верхний уровень). Элемент справочника помимо этих реквизитов может содержать другие реквизиты, указанные на закладке Данные. Для справочников с этим видом иерархии можно создать формы группы и формы элемента. При выборе вида Иерархия элементов все элементы справочника равнозначны. Примером справочников такого вида могут служить справочники подразделений и статьи затрат.
Если у справочника установлен вид иерархии Иерархия групп и элементов, то при создании формы элемента или группы на форме можно размещать элементы формы, связанные с реквизитами, которые принадлежат и элементу и группе (без ограничений). Форма позволит редактировать данные «без оглядки» на то, какой вариант использования установлен для реквизита. При записи объекта будут записаны только данные «своего» варианта использования: для формы элемента будут записаны реквизиты элементы и «общие» реквизиты, для группы – реквизиты группы и общие реквизиты. При этом никаких сообщений об ошибке формироваться не будет. При повторном открытии формы, элементы формы, связанные с «чужими» реквизитами, будут заполнены значениями по умолчанию.
Размещать группы сверху – свойство становится доступным, если выбрано значение Иерархия групп и элементов. Если свойство Размещать группы сверху установлено, то при отображении справочника в виде иерархического списка группы окажутся в верхних строчках списка, а элементы справочника будут располагаться ниже. Если это свойство не установлено, расположение групп и элементов будет подчиняться установленным правилам сортировки (по коду, наименованию и пр.). Например, при создании новой группы с кодом большим, чем у всех имеющихся групп и элементов (при сортировке по коду), в первом варианте эта подгруппа окажется нижней среди групп, но выше остальных элементов справочника; во втором варианте она займет самую нижнюю строчку.
Следует отметить, что установка или снятие свойства Размещать группы сверху не влияет на показ справочника в виде неиерархического списка.
Количество уровней иерархии – свойство становится доступным, если установлено свойство Ограничение количества уровней иерархии. Справочники в системе «1С:Предприятие» могут иметь более одного уровня вложенности. Если свойство Ограничение количества уровней иерархии не установлено, то максимальное количество уровней вложенности справочника неограниченно.
Владельцы – это свойство требует подробного объяснения.
Любой справочник может использоваться как сам по себе, так и быть подчиненным какому-либо другому справочнику или справочникам. Например, справочник договоров может использоваться отдельно, а может быть связан со справочником организаций.
Чтобы подчинить справочник другому, уже существующему в системе, в поле Список владельцев справочника следует нажать кнопку редактирования и в открывшемся окне выбора объекта отметить те справочники, которые являются владельцами данного справочника. Каждый такой справочник в системе «1С:Предприятие» называется владельцем, а сам справочник – подчиненным.
В отличие от многоуровневого справочника, в котором все элементы имеют одинаковую структуру, использование механизма подчиненных справочников позволяет связать элементы разной структуры. В этом случае каждый элемент подчиненного справочника будет логически связан с одним из элементов справочника-владельца.
Для справочников, которые имеют нескольких владельцев, у разных элементов могут быть владельцы разного типа, но у одного элемента может быть только один владелец.
Использование подчинения – позволяет управлять ограничением, накладываемым на владельцев. Могут использоваться только элементы, только группы или и группы, и элементы. Если у справочника несколько владельцев, то ограничение применяется ко всем владельцам.
Длина кода – свойство устанавливает максимальную длину кода элемента справочника.
Конфигуратор позволяет установить длину кода равной 0. Это может понадобиться в тех случаях, когда код элемента справочника не используется.
При назначении этого свойства желательно реально определить возможную длину кода. Однако следует иметь в виду, что в процессе эксплуатации конфигурации, если потребуется, длину кода можно увеличить.
Примечание. Максимальная длина кода равна 50.
Длина наименования – в свойстве устанавливается максимально возможная длина наименования элемента справочника.
Конфигуратор позволяет установить длину наименования равной 0. Это означает, что у справочника не будет наименования.
Примечание. Максимальная длина наименования равна 150.
Серии кодов – свойство позволяет установить диапазон проверки кода на уникальность и автоматическое присвоение кодов.
Если выбрана установка Во всем справочнике, то при автоматическом присвоении кода или при вводе кода пользователем вручную его уникальность будет проверяться среди всех элементов справочника.
Установка В пределах подчинения справедлива только для иерархических и подчиненных справочников. В этом случае уникальность кода будет проверяться системой только в пределах той группы и того элемента справочника-владельца, в которую вводится новый элемент справочника или редактируется уже существующий элемент.
При установке серии кодов В пределах подчинения нормальной является ситуация, когда находящиеся в разных группах элементы справочника имеют одинаковые коды. Это следует учитывать, если требуется переносить элементы многоуровневого справочника из одной группы в другую. При совпадении кода переносимого элемента с кодом уже существующего элемента в группе будет выдано предупреждение, и элемент не будет перенесен.
При установке серии кодов В пределах подчинения владельцу в иерархических подчиненных справочниках обеспечивается автоматическая нумерация и контроль уникальности кодов среди элементов с одинаковым владельцем, но различными родителями.
Тип кода – свойство позволяет выбрать тип значения для кода элемента справочника: Число или Строка. Выбор строкового типа кода бывает полезным, когда используется сложная система кодирования, и код может включать помимо цифр также буквы и символы-разделители. Наиболее характерный пример – использование в качестве кодов артикулов для швейных изделий.
Следует обратить внимание, что выбор строкового типа кода не исключает возможности автоматического присвоения таких кодов.
Для самого первого элемента система формирует код вида 001 (количество нулей зависит от установленной длины кода), то есть код представляет собой строку символов, но все символы в этой строке являются цифрами. При вводе других элементов в справочник система будет продолжать присваивать коды аналогичным образом – 002, 003 и т. д.
Если требования к ведению справочника предполагают непременное использование смешанных буквенно-цифровых кодов, то для целей автоматической нумерации можно использовать коды вида AA001. Здесь первая часть кода – символы АА – является текстовым префиксом, а вторая часть – символы 001 – будет интерпретироваться системой как число и использоваться при автоматическом присвоении очередного кода.
Например, если самым первым кодом в справочник введен АА001, то следующим автоматически присвоенным кодом будет АА002, затем – АА003, и так далее по возрастанию.
Текстовый префикс можно задать вручную (при вводе в справочник нового элемента ввести такой «составной» код) или использовать возможности установки префикса из встроенного языка системы «1С:Предприятие» (метод УстановитьНовыйКод()).
Допустимая длина кода – доступно в том случае, если свойство Тип кода установлено в значение Строка. С помощью свойства можно регулировать, строка какой длины будет хранить код. Если значение свойства равно Фиксированная, то длина строки, содержащая код элемента справочника, всегда будет равна значению, указанному в свойстве Длина кода. В противном случае длина строки будет равна реальному количеству символов, формирующих код элемента.
Реквизиты. Любой новый справочник можно представить в виде таблицы, которая имеет две колонки: код элемента справочника и его наименование. Система «1С:Предприятие» помимо кода и наименования позволяет хранить дополнительную информацию об элементе справочника. При редактировании справочника можно описать набор дополнительных реквизитов, предназначенных для хранения таких дополнительных сведений.
При показе справочника на экране эти реквизиты могут представляться в виде колонок табличного поля формы списка справочника. Кроме этого, сведения, хранящиеся в реквизитах, можно использовать при формировании в различных расчетах, при формировании отчетов и так далее.
Используя механизм реквизитов справочника, легко организовать, например, картотеку сотрудников. Для этого достаточно для справочника Сотрудники создать реквизиты для хранения сведений об образовании, паспортных данных и прочей кадровой информации. С помощью встроенных средств поиска в справочнике при использовании конфигурации нужная информация о сотруднике может быть легко найдена.
Табличные части. Для описания некоторых данных, относящихся к справочнику и не используемых самостоятельно, используют табличные части. Примером табличной части может служить состав семьи сотрудника (данные по каждому члену семьи описываются в реквизитах табличной части, а число членов семьи может быть произвольным), послужной список сотрудника и т. д.
Если бы в приведенном примере сведения по составу семей сотрудников могли использоваться самостоятельно, то их можно было бы выделить в отдельный справочник, подчиненный справочнику Сотрудники.
Основное отличие табличной части от подчиненного справочника в том, что на элементы справочника можно ссылаться, а на строки табличной части – нет. При обращении к элементу справочника он весь, вместе со всеми табличными частями, считывается из базы данных в память. Если табличная часть содержит достаточно большое количество строк, это может ухудшить производительность системы. Поэтому табличную часть стоит использовать, если не нужно хранить ссылки на элементы и количество элементов ограничено. Каждый справочник может иметь неограниченное число табличных частей.
Автонумерация. Установка свойства приводит к тому, что вновь введенному элементу в справочнике код будет присваиваться при записи. Автоматически присвоенный код можно исправить.
Контроль уникальности. Если код используется для однозначной идентификации конкретного элемента в справочнике, он должен быть уникальным (не должен повторяться). Если свойство Контроль уникальности установлено, проверка кода на уникальность будет проводиться автоматически при вводе в справочник нового элемента.
Основное представление – в свойстве задается представление элементов справочника. Например, значения типа СправочникСсылка, введенные в реквизит документа, справочника или константу, будут представляться в виде кода или наименования элемента справочника в зависимости от данного свойства. Для форм списков данная колонка становится колонкой по умолчанию. При открытии списка эта колонка становится активной.
Ввод на основании. На закладке Ввод на основании указывается, какие объекты конфигурации могут являться основанием для объектов данного типа и для каких объектов объекты данного типа могут являться основанием. По кнопке Конструктор ввода на основании запускается конструктор создания процедуры ввода на основании. Подробнее о работе с конструктором см. здесь.
Примером ввода на основании может служить ввод документа Передача на реализацию на основании элемента справочника Товары.
5.8.3. Свойства реквизитов справочника
Помимо основных свойств реквизиты справочника имеют следующие свойства:
● Тип – указывается тип данных реквизита.
● Использование – для иерархических справочников определяет использование реквизита для групп и элементов.
5.8.4. Предопределенные элементы справочника
Разработчик конфигурации может создать для справочников набор предопределенных элементов и групп элементов (для иерархических справочников). Подробное описание предопределенных элементов см. здесь.
ВНИМАНИЕ! Для справочника, имеющего владельца, нельзя создать предопределенные элементы. И наоборот, справочнику, имеющему предопределенные элементы, нельзя назначить владельца.
5.9. Документы
5.9.1. Общая информация
Документ – одно из основных понятий системы «1С:Предприятие». При помощи документов организуется ввод в систему информации о совершаемых хозяйственных операциях.
В большинстве своем документы, которые создаются в процессе настройки конфигурации задачи, являются электронными аналогами стандартных бумажных документов, однако использование этого типа данных может выходить далеко за рамки простой фиксации информации о хозяйственных операциях.
Каждый документ содержит информацию о конкретной хозяйственной операции и характеризуется своим номером, датой и временем. Дата и время – наиболее важные характеристики документов, так как позволяют устанавливать строгую временную последовательность совершения операций.
В конфигурации описывается только структура документа, конкретные экземпляры документов вводятся при работе с программой пользователем. Например, созданный в конфигурации документ Накладная при работе с системой «1С:Предприятие» позволит формировать накладные, которые будут иметь разное содержание, но одинаковый набор реквизитов, одинаковую логику поведения и так далее.
Далее для простоты вместо термина «структура документа» будет использоваться термин «документ», подразумевая под этим средства для ввода и визуализации документа.
Конфигуратор позволяет описать структуру документа, организовать формы для ввода информации в документ и описать алгоритм построения печатных форм документа.
Помимо даты, времени и номера документа можно создать набор реквизитов, позволяющих хранить дополнительную информацию.
Если объект предметной области, которой соответствует документ, имеет не только такие «простые» свойства, как, например, дату, номер и итоговую сумму, но и составные (списочные) свойства, документу может быть создан набор табличных частей. Например, в документе Расходная накладная может быть создана табличная часть для списка продаваемой номенклатуры.
Для работы с документами в конфигурации может быть создано необходимое количество списков документов одного вида и журналов документов разного вида. Форма списка отличается от формы журнала в первую очередь тем, что в списке отсутствует колонка Вид документа (т. к. список содержит документы одного вида), а журнал обычно содержит эту колонку.
При создании документа можно указать перечень журналов, в которых будет осуществляться работа с документами этого вида. Для документов разных видов можно указывать один журнал, что позволяет произвольным образом группировать документы в журналах. Назначенные документу журналы можно менять.
Документы могут изменять состояние регистров учета (проводиться). Если документ проведен, то данные, которые указал пользователь при вводе документа, отразились в учетных регистрах системы – изменились остатки товаров на складах, изменилась задолженность перед контрагентом и т. д. Документы могут проводиться в реальном времени (оперативное проведение) и прошлой датой (неоперативной проведение).
5.9.2. Свойства документа
Для работы с документами предназначена ветвь Документы дерева конфигурации. На этой же ветви располагаются служебные объекты конфигурации – нумераторы и последовательности.
В этом разделе будут описаны специфические свойства документа в дополнение к общим свойствам объектов конфигурации, описание которых см. здесь.
Свойства документа редактируются в палитре свойств или окне редактирования (см. здесь). Данные по документу в окне редактора распределены по закладкам.
На закладке Основное размещены основные данные по документу.
На закладке Данные вводятся реквизиты и табличные части.
В палитре свойств каждому реквизиту помимо основных свойств указывают тип. Если требуется обеспечить быстрый поиск или отбор нужной информации по реквизитам документа, для реквизитов нужно установить свойство Индексировать (подробнее см. здесь).
На закладке Нумерация объединены данные, которые используются для назначения правил нумерации документов.
У любого документа существуют обязательные реквизиты, которые создаются автоматически и которые удалить нельзя, – это дата, время и номер документа. В отличие от даты и времени, для номера документа можно задать несколько параметров, которые будут управлять поведением этого реквизита при работе с документами создаваемого вида. Совокупность этих параметров будет определять правила нумерации документов при работе системы «1С:Предприятие».
Автонумерация – установка свойства приводит к тому, что вновь введенному документу номер будет присваиваться автоматически. Автоматически присвоенный номер можно исправить.
Нумератор – документу может быть назначен нумератор. Для назначения нумератора документу, его следует выбрать в свойстве Нумератор. В этом случае прочие элементы, служащие для описания правила нумерации, за исключением свойства Автонумерация, становятся недоступными, то есть правила нумерации документов данного вида будут полностью определяться назначенным нумератором. О создании и свойствах нумераторов см. здесь.
Использование нумераторов позволяет организовать сквозную нумерацию документов разных видов. Для этого всем документам, для которых требуется иметь сквозную нумерацию, должен быть назначен один нумератор. Контроль уникальности и присвоение очередного номера будут выполняться с учетом всех документов, для которых назначен этот нумератор.
Длина номера – устанавливает максимальную длину номера документа.
Тип номера – свойство аналогично свойству Тип кода справочника (см. здесь).
Допустимая длина номера – доступно в том случае, если свойство Тип номера установлено в значение Строка. С помощью свойства можно регулировать, строка какой длины будет хранить номер. Если значение свойства равно Фиксированная, то длина строки, содержащая номер документа, всегда будет равна значению, указанному в свойстве Длина номера. В противном случае длина строки будет равна реальному количеству символов, формирующих номер документа.
Контроль уникальности – если это свойство установлено, то при вводе нового документа его номер проверяется на уникальность в пределах, установленных в свойстве Периодичность.
Периодичность – свойство устанавливает пределы контроля уникальности номеров документов и период повторяемости номеров. Если свойство Контроль уникальности номеров документов установлено, то в свойстве Периодичность указывается, в каких пределах будет осуществляться этот контроль.
При установленном свойстве Автонумерация система «1С:Предприятие» будет присваивать очередной порядковый номер каждому новому документу. После завершения периода, установленного в свойстве Периодичность, нумерация документов начнется с 1.
На закладке Движения производится настройка поведения при проведении и отмене проведения документа.
Проведение – свойство устанавливает, разрешено ли проведение документа при записи. Если выбрано Разрешить, то документ осуществляет движения регистров (изменяет их состояние). Другим следствием такого выбора будет автоматический вызов обработчика события ОбработкаПроведения проведения документа в режиме 1С:Предприятие, возникающего при нажатии кнопки формы документа, для которой при конфигурировании выбрано предопределенное действие Записать и закрыть (обычно кнопка ОК). Для формирования обработчика события ОбработкаПроведения можно воспользоваться конструктором движения регистров (см. здесь), кнопка вызова которого расположена на закладке Движения окна редактирования объекта Документ.
Оперативное проведение – свойство устанавливает, разрешено ли оперативное проведение документа. Для документов с разрешенным оперативным проведением при выборе не текущей даты проведение осуществляется в неоперативном режиме, т. к. учитывается уже свершившийся факт, который не требует контроля, осуществляемого в оперативном режиме (например, проверка остатка, указанного в расходной накладной товара).
Если для документа разрешено Оперативное проведение, то при создании нового документа время документа «нулевое». При проведении система получает оперативную отметку времени, которая может совпадать с текущей датой и текущим временем, а может быть и больше, чем текущее время, и присваивает ее документу, после чего осуществляется оперативное проведение. Более подробно об оперативной отметке времени см. здесь.
В случае редактирования документа с установленным свойством Оперативное проведение время уже отличается от текущего, поэтому при проведении (указана текущая дата) документа на экран выводится запрос о виде проведения. Если на вопрос о виде проведения выбрать Оперативное проведение, то для документа устанавливается текущее время. Если при редактировании изменить время (например, указать будущее время текущего дня), то система также установит текущее время. Если на вопрос о виде проведения выбрать Неоперативное проведение, то, когда формат даты не предусматривает ввода времени, в документе указывается время начала дня.
Удаление движений – свойство доступно, если в свойстве Проведение выбрано Разрешить. Оно задает режим удаления всех записей при перепроведении или отмене проведения документа, которые документ записал в процессе проведения:
● Режим Удалять автоматически означает, что удаление производится системой при выполнении повторного проведения уже проведенного документа (перед записью новых движений) и при отмене проведения документа.
● Режим Не удалять автоматически означает, что удаление движений выполняется программно в специальных случаях. Этот режим используется, если нужно управлять удалением и при проведении, и при отмене проведения.
● Режим Удалять автоматически при отмене проведения означает, что система будет автоматически удалять движения только при отмене проведения. При перепроведении движения не будут удаляться автоматически. Этот режим устанавливается по умолчанию.
Если свойство Удаление движений у документа установлено в значение Не удалять автоматически или Не удалять автоматически при отмене проведения, то для избежание дублирования информации, следует выполнять очистку наборов записей коллекции Движения вначале операции проведение.
Запись движений при проведении – свойство определяет поведение системы при создании движений во время проведения документа:
● Режим Записывать выбранные (режим по умолчанию) означает, что набор записей коллекции движения будет записан только в том случае, если свойство набора Записывать установлено в значение Истина (вне зависимости от того, были модифицированы записи набора или нет).
● Режим Записывать модифицированные (устанавливается при конвертации из версий «1С:Предприятие 8.1» и более ранних) означает, что записаны будут те наборы записей, которые были модифицированы (для них система автоматически установит свойство Записывать в значение Истина).
По окончании записи документа система ставит всем наборам записей, регистрирующим движения документа, свойство Записывать в исходное состояние, даже если запись завершилась неудачно.
Заполнение последовательности – выбирается режим автоматического заполнения последовательностей. В окне редактирования на закладке Последовательности определяется вхождение документа в последовательности.
В окне редактирования документа на закладке Журналы можно отметить те журналы документов, в которых при работе пользователя с системой «1С:Предприятие» будут отражаться документы данного вида. Необходимые формы журналов документов могут быть созданы потом.
На закладке Ввод на основании размещено два списка объектов конфигурации. В верхнем списке необходимо указать объекты, на основании которых может вводиться документ, а в нижнем – для которых данный документ является основанием при вводе нового объекта.
ВНИМАНИЕ! Документ может вводиться как на основании другого документа, так и на основании объектов другого вида (элементов справочника, плана видов характеристик, плана счетов и плана видов расчета). И наоборот, документ может являться основанием для ввода не только другого документа, но и объектов другого вида.
Для создания процедуры, осуществляющей подготовку данных создаваемого объекта на основании образца, следует воспользоваться специальным конструктором, описание которого см. здесь.
На закладке Права имеется возможность установки привилегированного режима при проведении (свойство Привилегированный режим при проведении) и/или при отмене проведения документа (свойство Привилегированный режим при отмене проведения):
● Если свойство установлено, то соответствующее действие (проведение или отмена проведения) система будет выполнять всегда в привилегированном режиме (при вызове проведения или отмены проведения на стороне сервера и в файловом варианте). Однако привилегированный режим не будет установлен, если проведение (или отмена проведения) документа выполняется в клиент-серверном варианте на стороне толстого клиента. В привилегированном режиме выполняется:
● Автоматическое удаление движений.
● Автоматическая запись движений.
● Соответствующий обработчик (ОбработкаПроведения или ОбработкаУдаленияПроведения). Однако запись объекта выполняется в обычном (непривилегированном) режиме.
● Привилегированный режим включается системой после выполнения записи объекта перед началом проведения (перед удалением движений, если они удаляются автоматически). Аналогично и при отмене проведения.
● При создании новых документов свойства имеют значение Истина, если в свойствах конфигурации указан основной режим запуска – управляемое приложение, и Ложь, если основным режимом запуска указан обычный.
5.9.3. Механизм проведения документов
Информация, отражающая хозяйственную деятельность предприятия, хранится в регистрах (см. здесь). Документы могут изменять состояние регистров. Этот процесс называется проведением. Данный механизм является рекомендуемым механизмом изменения состояния регистров. Проведение может выполняться в оперативном или неоперативном режиме (свойство Оперативное проведение).
Примечание. Как правило, механизм оперативного проведения используется для решения задач оперативного учета.
5.9.3.1. Оперативное и неоперативное проведение
Механизм оперативного проведения предназначен для того, чтобы разделить случаи, когда документ проводится в реальном времени, и случаи, когда проведение документа отражает уже свершившийся факт.
Проведение в реальном времени необходимо тогда, когда ввод и проведение документа не просто фиксируют в системе произошедшее событие, а участвуют в его формировании, помогая оператору правильно ввести информацию. Разумеется, это имеет смысл только в тот момент, когда данное событие происходит в реальной жизни.
Классическим примером является ввод и проведение документа, отражающего продажу товаров со склада. При вводе такого документа в задачу оператора входит не только правильный ввод списка товаров, которые приобретает покупатель, но и выполнение различных проверок. Прежде всего, необходимо проверить, что запрашиваемый товар имеется на указанном складе. При этом очень важно, чтобы проверка учитывала тот факт, что одновременно с этим оператором работают и другие операторы, которые могут одновременно выписывать те же самые товары. Соответственно, задачей системы является не допустить продажу одного и того же товара двум покупателям. Кроме того, может потребоваться и проверка доступного покупателю размера кредита или наличие факта оплаты счета, а также другие самые разнообразные проверки.
В то же время если документ вводится задним числом, то есть в момент его ввода известно, что такое событие уже произошло в жизни предприятия, например, конкретный товар уже отгружен клиенту, необходимость в таких проверках отпадает, и нужно просто отразить в учете произошедшее событие. В этом случае проведение документа только фиксирует событие, а не участвует в его формировании.
Таким образом, задача механизма оперативного проведения заключается в разделении этих двух вариантов проведения и с точки зрения пользователя, чтобы он понимал, какой вид проведения выполняется, и с точки зрения алгоритма проведения документа, чтобы тот отработал действия, соответствующие текущему варианту проведения.
Следовательно, оперативность или неоперативность проведения документа определяется по его дате. Если дата проводимого документа совпадает с текущей датой, то система будет проводить такой документ в оперативном режиме, не задавая вопросов, и в обработке проведения об этом можно узнать, чтобы выстроить определенный алгоритм проведения документа.
5.9.3.2. Расширение формы и проведение
Кроме свойства документа Оперативное проведение существует возможность задания режима проведения у расширения формы документа. Свойство Использовать режим проведения может принимать следующие значения:
● Неоперативный – документ всегда будет проводиться в неоперативном режиме. Если отсутствуют права на неоперативное проведение, будет выдано исключение.
● Оперативный – документ всегда будет проводиться в оперативном режиме. Если отсутствуют права на неоперативное проведение, то будет выдано исключение при попытке провести документ прошлого периода.
● Запрашивать – система всегда будет запрашивать текущий режим проведения.
● Автоматически – в этом случае система работает по следующему алгоритму:
● если дата документа меньше текущей, выполняется неоперативное проведение;
● если дата документа равна текущей, выполняется оперативное проведение;
● если дата документа больше текущей, выдается исключение;
● если невозможно провести документ в выбранном режиме (не хватает прав доступа и т. д.), также будет выдано исключение;
● если на стороне клиента режим проведения неизвестен, то в параметр РежимПроведения обработчика события ПередЗаписью будет передано значение Неопределено.
Одной из задач оперативного проведения документов является размещение документов в хронологическом порядке на шкале времени. Такое размещение необходимо, в частности, для того, чтобы корректно списывались остатки по регистрам остатков (см. здесь) оперативного учета. Для размещения документов используются такие понятия, как момент времени и оперативная отметка времени. Рассмотрим эти понятия более подробно.
Для определения положения документа на оси времени используется реквизит документа Дата, который содержит время с точностью до секунды. Это позволяет контролировать последовательность записи документов. Однако при большом объеме создаваемых документов вероятна ситуация, когда несколько документов будут иметь одинаковое значение даты (т. е. будут созданы в течение одной секунды). Как в этом случае определить последовательность созданных документов?
5.9.3.3. Момент времени
Для обработки подобных ситуаций существует понятие момент времени. Момент времени представляет собой совокупность даты, времени и ссылки на объект базы данных. Он позволяет однозначно идентифицировать любой объект ссылочного типа базы данных на оси событий, но имеет смысл в основном только для документов. Кроме того, момент времени позволяет идентифицировать и необъектные данные, например, записи регистров, подчиненных регистратору.
Понятие момента времени реализовано во встроенном языке при помощи универсального объекта МоментВремени.
Для нескольких документов, имеющих одинаковую дату и время, последовательность их на оси событий определяется системой исходя из ссылок на эти документы. Она может не совпадать с последовательностью создания документов, и она недоступна для изменения пользователем, то есть нельзя каким-либо образом повлиять на последовательность документов внутри одной секунды или «вычислить», что один документ создан раньше, а другой – позже.
5.9.3.4. Оперативная отметка времени
Оперативная отметка времени – это значение типа Дата. Оперативная отметка времени – это «основа», которая собственно и позволяет выполнять оперативное проведение документов. Оперативная отметка времени создается системой каждый раз при оперативном проведении документа. Ее значение формируется исходя из текущей даты сеанса и последней созданной оперативной отметки.
5.9.3.5. Поясное время
При работе системы в различных часовых поясах необходимо учитывать эту особенность при получении оперативной отметки времени. Например, когда в единой информационной базе, физически расположенной в одном городе (часовом поясе), ведется учет нескольких удаленных предприятий (например, филиалы холдинга), которые расположены в других городах (и других часовых поясах). В этом случае необходимо, чтобы для каждого филиала выдавалась своя отметка времени.
Для учета часовых поясов существует понятие часового пояса информационной базы и часового пояса сеанса.
Часовой пояс информационной базы определяет часовой пояс, который по умолчанию будет установлен для нового сеанса. При создании информационной базы часовой пояс информационной базы не определен. Однако может быть установлен с помощью метода глобального контекста УстановитьЧасовойПоясИнформационнойБазы(). Информация о часовом поясе информационной базы сохраняется в базе данных и не меняется при операциях загрузки/выгрузки информационной базы. При создании начального образа информационной базы (с помощью механизмов распределенной информационной базы, см. здесь) в создаваемый образ переносится часовой пояс информационной базы, из которой создается образ.
Если часовой пояс информационной базы не задан, то используется часовой пояс компьютера, на котором установлен сервер «1С:Предприятия» (в клиент-серверном варианте), или часовой пояс локального компьютера (в файловом варианте).
Часовой пояс сеанса описывает тот часовой пояс, в котором работает конкретный сеанс. По умолчанию часовой пояс сеанса равен часовому поясу информационной базы.
Часовой пояс сеанса может быть установлен с помощью метода глобального контекста УстановитьЧасовойПоясСеанса(). Часовой пояс сеанса сохраняется до конца сеанса. Используется для определения текущей даты сеанса и получения оперативной отметки времени.
5.9.3.6. Получение оперативной отметки времени
В ходе оперативного проведения система изменяет время документа таким образом, чтобы очередной документ, проводимый в оперативном режиме, имел бы момент времени более поздний, чем у предыдущего оперативно проведенного документа. Для этого используется понятие оперативной отметки времени. Оперативная отметка получается системой автоматически при оперативном проведении, но может быть получена во встроенном языке в явном виде с помощью метода ПолучитьОперативнуюОтметкуВремени() на основании текущей даты сеанса.
Текущая дата сеанса равна дате компьютера, приведенной к часовому поясу сеанса. Под приведением понимается пересчет местного времени компьютера в поясное время, заданное часовым поясом сеанса. Пересчет выполняется через универсальное координированное время (UTC).
Все пользователи обращаются к единому механизму оперативной отметки времени, а механизм выдает каждому пользователю очередную отметку. Механизм получения оперативной отметки времени обеспечивает получение даты, большей, чем предыдущая отметка, полученная этим или другим пользователем в данном часовом поясе. В качестве оперативной отметки система, как правило, возвращает текущее время сеанса. Однако если текущее время больше или равно последней выданной какому-либо пользователю отметке, то возвращается значение на секунду большее, чем значение последней выданной отметки. Таким образом, обеспечивается получение при каждом обращении значения, по возможности соответствующего текущему времени, но в обязательном порядке большего, чем предыдущее полученное значение.
Следует помнить, что различные сеансы с одинаковым часовым поясом будут использовать одно и то же время для получения оперативной отметки времени. Таким образом, будет существовать столько несвязанных оперативных отметок времени, сколько уникальных часовых поясов будет установлено в качестве часовых поясов сеансов.
5.9.4. Нумераторы
5.9.4.1. Общая информация
Нумератор представляет собой объект конфигурации, описывающий правила нумерации документов: тип и длину номера документа, его периодичность, необходимость контроля уникальности.
Основное назначение нумератора – обеспечить возможность сквозной нумерации документов разного вида. Для этого таким документам назначается одинаковый нумератор.
5.9.4.2. Управление списком нумераторов
Для работы с объектами конфигурации типа Нумератор предназначена ветвь дерева конфигурации, которая расположена «внутри» ветви Документы и начинается у ключевого слова Нумераторы.
5.9.4.3. Свойства нумератора
В этом разделе будут описаны специфические свойства нумераторов в дополнение к общим свойствам объектов конфигурации, описание которых см. здесь.

Рис. 139. Свойства нумератора
Тип номера – выбирается тип значения для номера документа – числовой или текстовый. Выбор текстового типа номера бывает полезным, когда используется сложная система нумерации документов, и номер документа может включать, помимо цифр, также буквы и символы-разделители.
Длина номера – устанавливает максимальную длину номера документа.
Периодичность – свойство устанавливает две важные характеристики нумератора: пределы контроля уникальности номеров документов и период повторяемости номеров.
Если свойство Контроль уникальности номеров документов установлено, свойство Периодичность устанавливает, в каких пределах осуществлять этот контроль.
Например, если установлена периодичность В пределах дня, то уникальность номеров документов будет контролироваться в пределах суток: на следующие сутки номера документов могут повторяться, но в пределах суток они будут уникальны.
При установленном свойстве Автонумерация (см. здесь) система «1С:Предприятие» будет присваивать очередной порядковый номер каждому новому документу. После завершения периода, установленного в свойстве Периодичность, нумерация документов начнется с 1.
Контроль уникальности – если это свойство установлено, то при вводе нового документа его номер проверяется на уникальность в пределах, установленных в свойстве Периодичность.
5.9.5. Последовательности документов
Последовательности документов являются вспомогательными объектами конфигурации. Они предназначены для обеспечения проведения определенных документов в строгой хронологической последовательности.
Все документы в системе «1С:Предприятие» образуют единую хронологическую последовательность. Для этого каждый документ имеет дату и время. Даже если два документа имеют одинаковую дату и одинаковое время, они все равно располагаются в определенной последовательности, определяемой моментом их ввода в систему. Дата и время документа могут быть изменены. Таким образом, независимо от порядка ввода документов они могут быть расположены в последовательности, отражающей реальную последовательность происходивших в хозяйственной жизни предприятия событий, которые данные документы отражают.
В системе «1С:Предприятие» в процессе проведения документ выполняет некоторые действия, которые отражаются данным документом в различных механизмах учета, поддерживаемых «1С:Предприятием».
Алгоритм проведения документа, как правило, отражает в учете данные, записанные в самом документе (в его реквизитах и табличных частях). Однако в некоторых случаях алгоритм проведения документа анализирует также и текущие итоги, используя их при проведении. Например, если документ списывает товары или материалы по средней себестоимости, то для определения суммы списания алгоритм проведения будет анализировать остатки товаров (материалов) на момент документа. Если списание выполняется по методам LIFO или FIFO, то алгоритм проведения будет анализировать существующие остатки товаров (материалов) в разрезе партий на момент позиции документа, определяемой датой и временем проведения документа.
Очевидно, что документы, основывающиеся при проведении на данные итогов, должны проводиться строго последовательно. Однако на практике из-за ошибок при вводе информации и несвоевременного поступления документов часто приходится вводить или исправлять документы задним числом. Разумеется, в этом случае движения регистров, сформированные всеми последующими документами (расположенными после того, который был исправлен), становятся некорректными. Например, если выяснилось, что в одной из приходных накладных, введенных в начале месяца, было неверно указано количество товара, то во всех последующих расходных накладных, списывающих имеющиеся в наличии партии, необходимо заново проанализировать остатки с учетом внесенных изменений и заново записать движения регистров. То есть все документы, анализирующие остатки и расположенные после измененного документа, должны быть перепроведены.
Для автоматического контроля необходимости перепроведения документов используются объекты ветви Последовательности. Каждый введенный в конфигурации объект Последовательность обеспечивает контроль за порядком проведения документов указанных видов. Таким образом, в системе может существовать несколько независимых последовательностей.
5.9.5.1. Управление списком последовательностей
Работа по созданию объектов конфигурации типа Последовательность ведется в окне Конфигурация. Для последовательности отведена отдельная ветвь дерева конфигурации, которая расположена «внутри» ветви Документы и начинается у ключевого слова Последовательности.
5.9.5.2. Свойства последовательности документов
В этом разделе будут описаны специфические свойства последовательностей документов в дополнение к общим свойствам объектов конфигурации, описание которых см. здесь.
Свойства последовательности редактируются в окне редактирования Последовательность.
На закладке Использование выбираются документы, которые относятся к данной последовательности, и движения, влияющие на последовательность.

Рис. 140. Свойства последовательности
Перемещение границы при проведении. Если для свойства указано значение Перемещать, то документ, зарегистрированный в этой последовательности, при своем проведении будет пытаться переместить границу этой последовательности документов. Если для свойства указано значение Не перемещать, то документ не будет перемещать границу этой последовательности документов при своем проведении.
Входящие документы – в верхнем списке окна Последовательность указываются виды документов, которые относятся к данной последовательности.
В качестве документов, на проведение которых будет влиять данная последовательность, следует выбрать те виды документов, которые при проведении будут анализировать состояние различных регистров. Например, такими документами могут быть расходные накладные, накладные на передачу, на реализацию и т. д.
Движения, влияющие на последовательность – одно из основных свойств последовательности. Оно определяет, какие из движений будут влиять на необходимость перепроведения документов данной последовательности, то есть движения или итоги каких механизмов учета используются документами данной последовательности при проведении. Например, в качестве таких движений могут выступать движения регистров.
Для настройки данного параметра следует добавить в список те виды регистров, движения которых будут нарушать данную последовательность.
Измерения. Последовательности могут иметь подчиненные объекты, называемые измерениями, которые создаются на закладке Данные окна редактирования.
Если для последовательности не создано ни одного измерения, то при восстановлении данной последовательности будут перепроводиться все входящие документы. Если требуется, чтобы данная последовательность учитывала не все, а вполне определенные ситуации, то в последовательность включают измерение. В этом случае перепроводить нужно будет только те документы, которые изменяют состояние регистра с учетом свойств измерения.
Если изменяется состояние регистров, участвующих в последовательности, то неактуальными становятся более поздние документы с теми же значениями в реквизитах (перечислены в свойстве измерения Соответствие реквизитам документов), которые содержатся в реквизитах удаленных (добавленных) записей регистров (перечислены в свойстве измерения Соответствие реквизитам движений).
Например, последовательность учитывает изменение состояния регистров по документам Приходная накладная и Расходная накладная. Если требуется учитывать дополнительные критерии необходимости перепроведения указанных документов (например, нужно перепроводить документы по определенному значению номенклатуры), то в последовательность следует добавить измерение. В палитре свойств измерения указать его тип (СправочникСсылка.Номенклатура) и установить связь с реквизитами регистров.

Рис. 141. Свойства измерения последовательности
В соответствии с выбранным типом измерения в списки документов и регистров измерения для выбора включаются только те объекты, в состав которых входят указанные типы измерения.
Введение измерения позволяет сократить время перепроведения документов, что особенно важно при значительном числе документов, т. к. будут перепроводиться только те документы, которые содержат данные по указанному значению измерения.
5.9.5.3. Работа с последовательностями документов
При работе в режиме 1С:Предприятие для каждой введенной в конфигурации последовательности документов система будет автоматически поддерживать границу последовательности. В качестве границы последовательности будет выступать позиция документа. При последовательном проведении документов, входящих в данную последовательность, граница последовательности будет устанавливаться на каждый вновь проведенный документ. Однако если будет проводиться документ, относящийся к данной последовательности, но расположенный позже другого проведенного документа, относящегося к той же последовательности и находящегося после текущей границы последовательности, то граница последовательности сдвигаться не будет, так как нарушается последовательность проведения документов. Эта ситуация может быть проанализирована алгоритмом проведения документа.
При проведении документов задним числом, отмене проведения или удалении документов, если удаляются или записываются движения регистров, указанные как влияющие на данную последовательность, граница последовательности отодвигается на момент измененного документа. Перед перемещением границы назад производится проверка на наличие границ, которые необходимо переместить назад. Эта проверка производится без эксклюзивной блокировки границы.
Таким образом, граница последовательности будет продвигаться вперед при последовательном проведении документов, относящихся к данной последовательности, и будет отодвигаться назад при изменении задним числом движений регистров, относящихся к данной последовательности.
В режиме перепроведения документов (вызывается выбором пункта Все функции – Стандартные – Проведение документов) существует специальная возможность восстановления последовательности проведения документов. При ее использовании система автоматически выполняет перепроведение всех документов, относящихся к данной последовательности, от границы последовательности до указанного момента.
В приведенном нами примере с учетом товаров проводимые расходные накладные будут сдвигать границу последовательности вперед. Любое изменение в движениях по регистру, на котором ведется стоимостный учет товаров, записанное раньше границы последовательности, будет отодвигать границу последовательности назад, на момент этого документа. После этого проводимые документы, находящиеся позже границы последовательности, уже не будут двигать ее вперед, если между границей последовательности и проводимым документом окажутся проведенные документы из этой последовательности. Режим восстановления последовательности будет перепроводить все расходные накладные. Заметим, что приходные накладные хотя и влияют своими движениями на границу последовательности, перепроводиться не будут, так как они не используют в алгоритме проведения остатков и не включены в список документов, относящихся к данной последовательности. После выполнения восстановления последовательности проводимые после границы последовательности документы снова будут двигать границу вперед.
Режим восстановления последовательности позволяет автоматически выполнить перепроведение всех документов, относящихся к последовательности, от текущей позиции границы последовательности до указанного момента. В верхней части диалога следует выбрать позицию, до которой будет выполняться перепроведение документа.
5.9.6. Ввод документов на основании
Одним из режимов ввода новых документов в процессе работы пользователя с системой «1С:Предприятие» является режим ввода на основании. С точки зрения пользователя режим ввода на основании позволяет вводить документы или элементы справочников, заполняя их реквизиты путем копирования информации из другого объекта информационной базы – документа или объекта другого вида.
На закладке Ввод на основании можно выбрать объекты, которые могут являться основанием для выбранного вида документа (поле Вводится на основании), и те объекты, которые могут быть введены на основании данного вида документов (поле Является основанием для).
Для реализации механизма ввода на основании необходимо реализовать в модуле документа обработчик события ОбработкаЗаполнения. Описание работы механизма заполнения см. здесь.
Текст обработчика может быть доработан специалистом, осуществляющим конфигурирование системы. В тексте обработчика следует предусмотреть выполнение тех или иных операций по переносу информации в зависимости от вида документа-образца, а также любые другие необходимые действия.
Конструктор ввода на основании (см. здесь) предназначен для облегчения создания этого обработчика.
5.10. Журналы документов
В системе «1С:Предприятие» журналы документов являются объектами, позволяющими осуществлять работу с документами разных видов. Работая с формами журнала, пользователь может вводить документы, просматривать их, редактировать и удалять.
Пользователь может искать любой документ в журнале по содержимому граф, выполнять поиск документов по их номерам, осуществлять отбор документов по различным признакам.
Конфигуратор позволяет создавать любое необходимое число журналов.
При создании журнала для него может быть создано произвольное число экранных форм, на которых располагаются табличные поля, содержащие колонки для отображения вида документа, номера, даты и времени, а также дополнительные графы для отображения значений любых других реквизитов документов из числа отображаемых в каждом журнале.
Если ни одной формы журнала не создано, в режиме 1С:Предприятие автоматически создается форма журнала по умолчанию.
5.10.1. Создание журнала
Для работы с журналами документов предназначена ветвь Журналы документов дерева конфигурации.
В системе «1С:Предприятие» процессы создания журналов и размещения документов по конкретным журналам тесно связаны между собой. Указание отображения информации документа в определенном журнале синхронизировано с данными журнала о документах, информация о которых представлена в журнале.
При создании и журнала, и документов в список журналов и документов автоматически будет добавлен созданный журнал или документ. Для отражения данных документа в журнале необходимо или в журнале, или в документе указать эту принадлежность. Указание принадлежности документа журналу можно производить как в журнале, так и в документе, т. к. эта операция синхронизирована.
5.10.2. Редактирование журнала
В этом разделе будут описаны уникальные свойства журналов в дополнение к общим свойствам объектов конфигурации (см. здесь), и приемы редактирования объектов конфигурации типа Журнал, отличные от общих приемов редактирования объектов конфигурации.
Редактирование свойств журнала (формирование списка дополнительных граф и определение их состава, форм журнала и макетов печатных форм и др.) выполняется в окне редактирования (см. здесь).
На закладке Данные формируется список документов, входящих в журнал, и список граф журнала.
В каждом подчиненном объекте, расположенном в ветви Графы, указывается реквизит всех документов, включаемый в журнал (см. здесь).
5.10.3. Графы журнала документов
Когда в конфигурации создается новый журнал документов, для работы с ним может быть создано неограниченное число форм журнала. Форма журнала создается с помощью конструктора форм объектов конфигурации (см. здесь). Конструктор размещает в форме табличное поле, содержащее набор граф для показа различных реквизитов документов. При создании формы журнала конструктор формы создает графы: картинка (для показа состояния документа), вид, дата и номер документа. Если требуется включить в журнал дополнительную информацию, то необходимо сформировать список дополнительных граф и разместить их в формах.
На закладке Данные окна редактирования располагается список документов, данные которых отображаются в журнале. Для создания дополнительной графы в нижнем списке нужно добавить подчиненный объект Графа и указать реквизиты документов, данные которых будут показываться в графе.
Для выбора реквизитов документов, которые будут размещены в графе журнала, в палитре свойств графы, в свойстве Ссылки, нужно нажать кнопку выбора. На экран выводится окно выбора реквизитов документов.

Рис. 142. Выбор реквизитов для графы
ВНИМАНИЕ! Нельзя выбрать несколько реквизитов одного и того же документа.
Если реквизит какого-либо документа не выбран, то в данной графе журнала документов будет отсутствовать информация по всем документам этого вида. При выборе следует руководствоваться исключительно здравым смыслом и не смешивать в одной графе абсолютно разные понятия (например, наименование контрагента и сумму документа).
Помимо обязательных граф документов (Дата, Номер, Вид документа) и граф, указанных в подчиненной группе объектов журнала Графы, в журнал можно добавить любое количество дополнительных граф.
Если все, входящие в состав журнала, документы со строковым типом номера имеют фиксированную длину номера, то графа журнала Номер также будет иметь фиксированную длину. Если хотя бы один документ, входящий в состав журнала, со строковым типом номера имеет переменную длину номера – графа журнала Номер создается с переменной длиной.
Новая графа добавляется в список граф выбранного объекта Журналы документов. Наличие в журнале дополнительных граф дает возможность пользователю получить наиболее важные сведения о документе уже при просмотре журнала, не открывая сам документ.
Для элемента формы, отображающего графу журнала, автоматически применяются следующие свойства реквизитов, входящих в состав графы:
● Режим пароля – если такой режим установлен хотя бы у одного реквизита, входящего в состав графы.
● Формат – при полном совпадении у всех реквизитов, входящих в состав графы, на всех языках, определенных в конфигурации.
● Подсказка – если подсказки совпадают для всех реквизитов, выводится одна подсказка; если подсказки не совпадают, они выводятся через запятую.
● Выделять отрицательные – если данное свойство установлено у всех реквизитов, входящих в состав графы.
● Многострочный режим – если данное свойство установлено у всех реквизитов, входящих в состав графы.
5.10.4. Интерактивное создание нового документа
Если журнал документов включает в себя более одного типа документа, то в форме списка журнала существует два варианта создания нового документа:
● В командной панели размещена кнопка Создать и после ее нажатия (или после нажатия клавиши Ins) открывается диалог со списком типов документов, отображаемых в журнале.
Данный вариант автоматически используется в том случае, если свойство конфигурации Режим совместимости (см. здесь) установлено в значение Версия 8.3.3 и младше.
● В командной панели размещена кнопка Создать с подменю, которое содержит перечень всех видов документов, отображаемых журналом. Такое же подменю формируется при нажатии клавиши Ins. Меню формируется у текущей ячейки таблицы. Если журнал отображает один тип документа, то никаких подменю не формируется.
Виды документов, отключенные функциональными опциями (см. здесь) и на которые у текущего пользователя отсутствует право ИнтерактивноеДобавление (см. здесь), не попадают в автоматически формируемое меню создания нового документа.
Данный вариант автоматически используется в том случае, если свойство конфигурации Режим совместимости (см. здесь) установлено в значение Версия 8.3.4 и старше или Не используется. Данное поведение соответствует командной панели динамического списка с автоматическим заполнением.
В случае автоматического формирования списков типов документов, эти типы отсортированы по представлению входящих документов.
Если командная панель динамического списка или формы (при условии, что основным реквизитом формы является динамический список) не использует автоматическое заполнение, то существует возможность вручную сформировать такое подменю. Для этого необходимо выполнить следующие действия:
1. Создать в командной панели группу кнопок с необходимым названием (например, Создать) и видом Подменю.
2. В созданную группу добавить стандартную команду динамического списка Создать по параметру. Для кнопки, связанной с этой командой, указать в качестве значения свойства Параметр, тип документа, который будет создаваться при нажатии на эту кнопку. Представлением кнопки будет служить представление соответствующего типа документа (указанного в свойстве Параметр).
3. Добавить столько команд, сколько документов планируется создавать с помощью данного меню.
При ручном создании кнопки с подменю следует учитывать следующий факт: при нажатии в динамическом списке клавиши Ins, в подменю будет включен весь список типов документом, отображаемых динамическим списком, а не только те типы, которые размещены в подменю командной панели.
Если в форме списка журнала происходит обработка события таблицы ПередНачаломДобавления, то в этом событии имеется возможность проанализировать, какой документ необходимо создать. Параметр процедуры обработчика события Параметр будет содержать тип создаваемого документа в том случае, если создание документа инициировано с помощью кнопки, связанной с командой Создать по параметру (с указанием этого параметра). Во всех остальных случаях значение этого параметра будет равно значению Неопределено.
5.11. Перечисления
Перечисление представляет собой служебный тип данных, который не используется самостоятельно, а применяется в основном в совокупности с другими типами данных. Определить перечисление можно как список возможных значений реквизита.
Перечисления используются при вводе значений реквизитов документов, справочников, при вводе значений констант, в тех случаях, когда необходимо исключить неоднозначный ввод информации.
Рассмотрим в качестве примера такое понятие, как «статус покупателя». В простейшем случае покупатели бывают розничные и оптовые. Со статусом покупателя обычно связывают уровень предоставляемых скидок с продажной цены товаров.
Такой список «статусов» – розничный, оптовый – может служить примером простого перечисления. При выписке расходной накладной от пользователя системы требуется указать статус покупателя, выбрав его из этого списка. Выбранный статус покупателя, в свою очередь, определяет размер продажных цен.
Если статус покупателя вводится в процессе настройки конфигурации задачи как перечисление, то специалист, выполняющий конфигурирование системы «1С:Предприятие», может заранее ввести варианты расчета продажных цен в зависимости от указанного статуса.
Прежде всего, перечисление не может пополняться в процессе работы с ним: список его значений задается при настройке перечисления в конфигураторе.
Перечисление не имеет вложенности – все его значения находятся на одном уровне.
Основная особенность перечисления состоит в том, что список значений перечисления известен и доступен в конфигураторе – сама конфигурация использует конкретные значения перечисления.
Использование перечисления позволяет ограничить число возможных вариантов, например, при вводе реквизита документа. Так как список значений перечисления создается в конфигурации, то можно организовать проверку выбранного значения и описать действия, которые должны за этим выбором последовать.
Для работы с перечислениями предназначена ветвь Перечисления дерева конфигурации.
Редактирование перечисления заключается в создании списка значений перечислений. Для редактирования перечисления используется окно редактирования объекта Перечисление. При создании нового перечисления свойство Использовать стандартные команды выключено.
На закладке Данные производится формирование значений перечисления.

Рис. 143. Добавление значения перечисления
В палитре свойств указывается имя и синоним.
Список значений перечисления в режиме 1С:Предприятие используется следующим образом: каждое значение перечисления представляется синонимом; если синоним не задан, то используется его имя.
В приведенном на рис.143 примере значение перечисления ВидыТоваров будет представляться в виде Товар (по введенному синониму).
На закладке Формы создаются формы списка и выбора. Это позволяет создавать различные формы для выбора (в зависимости от применяемого контекста). Формы списка позволяют распечатывать списки перечислений. При создании формы списка по умолчанию автоматически включается свойство Использовать стандартные команды.
На закладке Макеты могут быть созданы макеты печати.
5.12. Отчеты и обработки
5.12.1. Общая информация
Любая система автоматизации учета только тогда выполняет свои функции, когда она имеет средства обработки накопленной информации и получения сводных данных в удобном для просмотра и анализа виде. Как правило, для решения подобных задач в системе автоматизации учета существует возможность формирования отчетов. Конфигуратор позволяет формировать набор различных отчетов, достаточных для удовлетворения потребности пользователей системы в достоверной и подробной выходной информации.
Для получения отчетной информации в системе «1С:Предприятие» используются объекты конфигурации, расположенные в ветви Отчеты дерева конфигурации. Каждый объект этого типа может содержать алгоритм формирования «бумажного» или «электронного» отчета на внутреннем языке системы «1С:Предприятие» или схему компоновки данных, на основании которой система «1С:Предприятие» может автоматически выполнить отчет (см. здесь). Отчет может содержать одну или несколько форм, с помощью которых, при необходимости, можно организовать ввод каких-либо параметров, влияющих на ход алгоритма. Для вывода результатов выполнения алгоритма на экран и принтер отчет может иметь созданные с помощью конструктора макетов описания печатных форм (макеты).
Редактирование свойств объектов типа Отчет и Обработка и создание подчиненных объектов выполняются в окне редактирования (см. здесь).
Для выполнения различных действий над информацией в системе «1С:Предприятие» используются объекты конфигурации, расположенные в ветви Обработки дерева конфигурации. Например, с их помощью можно выполнять удаление из системы устаревших данных, импорт информации из других систем и многое другое. Характер выполняемых в этом случае действий отражает название объекта конфигурации – Обработка, так как в результате информация, хранящаяся в системе, претерпевает какие-либо изменения.
Обработка может содержать одну или несколько форм, с помощью которых, при необходимости, можно организовать ввод каких-либо параметров, влияющих на ход алгоритма. Вывод результатов выполнения алгоритма на экран и принтер осуществляется с помощью конструктора макетов описания печатных форм (макеты).
Основное отличие отчета от обработки заключается в возможности использования схемы компоновки данных (подробнее см. здесь). В остальном обработка не отличается от отчета.
Существует возможность для нескольких (или всех) отчетов прикладного решения использовать единые формы отчета, настроек или варианта отчета. Для этого необходимо использовать общие формы. В общем случае можно выделить следующие варианты использования:
● Для всех отчетов прикладного решения используется единый набор форм работы с отчетами. В этом случае нужно создать необходимые формы и указать их в свойствах конфигурации (см. здесь). Тогда в самих отчетах формы разрабатывать не нужно, т. к. будут использоваться общие формы.
● Можно выделить наборы отчетов, для каждого из которых необходимо разработать свои формы работы с отчетом. В этом случае создаются общие формы работы с отчетами, которые указываются для каждого отчета «своей» группы. Так можно сделать особый набор форм, например, для бухгалтерских отчетов или для отчетов аналитиков.
Примечание. Если у нескольких отчетов в качестве основной формы указана одна общая форма, то в толстом клиенте (в обычном режиме) одновременно можно будет открыть только один из этих отчетов.
Если в форме отчета используется стандартная команда Открыть новое окно, то следует помнить о том, что в новое окно не передаются те параметры, которые были переданы в форму, из которой использована стандартная команда.
5.12.2. Внешние обработки и отчеты
5.12.2.1. Общая информация
Внешней обработкой в системе «1С:Предприятие» называется обработка, хранящаяся вне конфигурации, в отдельном файле внешней обработки. Внешняя обработка служит для решения тех же задач, что и объекты конфигурации типа Отчет или Обработка.
Внешним отчетом в системе «1С:Предприятие» называется отчет, хранящийся вне конфигурации, в отдельном файле внешнего отчета. Внешний отчет служит для решения тех же задач, что и объекты конфигурации типа Отчет.
Основное назначение внешнего обработки (отчета) заключается в возможности реализовывать, поставлять и обновлять некоторые возможности отдельно от конфигурации.
Внешние обработки и отчеты могут храниться в двух разных форматах:
● Двоичные файлы, имеющие расширение .epf и .erf соответственно. Эти файлы могут использоваться как для редактирования в конфигураторе, так и для использования в режиме 1С:Предприятия. Имеется возможность разработки и отладки в процессе работы системы «1С:Предприятие». В этом случае разработка и отладка обработки (отчета) значительно ускоряются: редактирование и сохранение внешней обработки (отчета) выполняются в режиме Конфигуратор, без сохранения конфигурации в целом, а запуск – в режиме 1С:Предприятие. Для выполнения внешняя обработка (отчет) загружается при помощи пункта Файл – Открыть и работает так же, как и любая другая обработка (отчет) конфигурации.
● XML-файлы в формате, соответствующим файлам, которые используются при выгрузке/загрузке конфигурации в файлы (см. здесь). При использовании этого формата поддерживается только редактирование внешней обработки (отчета) в режиме Конфигуратора. Для использования в режиме 1С:Предприятия внешнюю обработку (отчет) необходимо сохранить в двоичном формате .erf/.epf. Для работы используется формат версии 2.0.
Примечание. Внешняя обработка (отчет), открываемые с помощью меню Файл – Открыть, будут исполняться в безопасном режиме (см. здесь), если у пользователя отсутствуют административные права доступа.
Любой объект конфигурации типа Обработка или Отчет может быть сохранен в файл внешней обработки (отчета), и наоборот – существующий объект конфигурации может быть заменен внешней обработкой (отчетом). Для внешней обработки (отчета) может быть создана справочная информация, как и для других объектов конфигурации.
Совет. Для обеспечения целостности конфигурации внешние обработки (отчеты) рекомендуется использовать в основном в отладочных целях. После отладки алгоритма формирования обработки (отчета) необходимо включить внешнюю обработку в конфигурацию.
Сохранение внешней обработки (отчета) в XML-формате можно использовать в том случае, если предполагается хранить эту обработку (отчет) во внешней системе контроля версий. XML-формат для этого более удобен, чем двоичный формат .epf (.erf). Конфигуратор позволяет открывать для редактирования внешние обработки (отчеты) в любом формате. При этом запись по умолчанию выполняется ровно в том же формате, в котором внешняя обработка (отчет) была открыта в конфигураторе. Для смены формата хранения необходимо выполнить команду Файл – Сохранить как… или Файл – Сохранить копию… и в открывшемся диалоге выбрать нужный формат сохранения.
5.12.2.2. Создание внешней обработки (отчета)
Для создания внешней обработки (отчета) необходимо выбрать пункт Файл – Новый и в выданном на экран запросе выбрать строку Внешняя обработка или Внешний отчет.

Рис. 144. Выбор вида документа
На экран будет вызван редактор форм для разработки внешней обработки (отчета). Для внешнего отчета окно редактирования будет дополнительно содержать управляющие элементы для создания, настройки и редактирования системы компоновки данных.
Так как внешняя обработка (отчет) не является частью текущей конфигурации (хотя и очень тесно с ней связана), процедура ее сохранения отличается от процедуры сохранения изменений конфигурации (см. здесь). Для сохранения внешней обработки (отчета) необходимо использовать пункт Файл – Сохранить, или Файл – Сохранить как…, или Файл – Сохранить копию. В стандартном диалоге сохранения файла нужно выбрать нужный вариант сохранения (см. здесь), а затем ввести имя сохраняемой внешней обработки (отчета).
5.12.2.3. Использование внешних обработок (отчетов)
Для использования внешней обработки (отчета) при работе с системой «1С:Предприятие» ее необходимо открыть так же, как это делается в конфигураторе. Однако следует иметь в виду, что в системе «1С:Предприятие» внешняя обработка (отчет) открывается только для исполнения: пользователь не может его редактировать. При попытке открытия проверяются соответствующие права доступа, и происходит установка безопасного режима (если у пользователя нет административных прав). Кроме того, для исполнения внешней обработки (отчета) она должна быть сохранена в двоичном формате .epf(.ert), подробнее см. здесь.
Компиляция модуля внешней обработки (отчета) выполняется при открытии внешней обработки (отчета), поэтому после редактирования внешней обработки (отчета) в конфигураторе и ее сохранения необходимо вновь открыть эту обработку в режиме 1С:Предприятие.
Кроме того, работа с внешними обработками (отчетами) возможна также на сервере «1С:Предприятия». При этом сохраняются все ограничения на использование интерактивных объектов (форм и т. д.).
Для того чтобы использовать внешнюю обработку (отчет) из встроенного языка, необходимо вначале подключить ее с помощью метода Подключить() (доступен только на сервере «1С:Предприятия»).
Копировать в буфер обмена// На клиенте размещаем обработку во временном хранилище АдресХранилища = ""; Результат = ПоместитьФайл(АдресХранилища, "ВнешОбработка.epf", , Ложь); ... // На сервере подключаем обработку из созданного ранее // временного хранилища. ИмяОбработки = ВнешниеОбработки.Подключить(АдресВременногоХранилища);
В переменную ИмяОбработки будет помещено имя внешней обработки, которое в дальнейшем будет использоваться для обращения к подключенной внешней обработке. Например, при открытии формы обработки:
Копировать в буфер обмена// Откроем форму подключенной внешней обработки ОткрытьФорму("ВнешняяОбработка."+ ИмяОбработки +".Форма");
Внешняя обработка (отчет) может быть подключена в безопасном режиме (см. здесь). Для этого следует использовать параметр БезопасныйРежим методов подключения Подключить() и Создать(). Режим подключения внешней обработки (отчета) будет зависеть от значения этого параметра:
● Параметр имеет значение Истина: внешняя обработка (отчет) подключаются в безопасном режиме;
● Параметр имеет значение Ложь: внешняя обработка (отчет) подключаются в не безопасном (опасном) режиме;
● В качестве значения параметра указано имя профиля безопасности (подробное описание см. здесь):
● Имя не указано: внешняя обработка (отчет) подключается в безопасном режиме;
● Имя профиля указано, и для этого профиля параметр Профиль безопасности безопасного режима установлен в значение Истина: внешняя обработка (отчет) будет подключена, но работать будет под управлением профиля безопасности с указанным именем;
● Имя профиля указано, и для этого профиля параметр Профиль безопасности безопасного режима установлен в значение Ложь: внешняя обработка (отчет) будет подключена, но работать будет под управлением профиля безопасности по умолчанию;
● Профиль безопасности с указанным именем отсутствует на сервере «1С:Предприятия»: внешняя обработка (отчет) подключается в безопасном режиме.
Внешняя обработка (отчет) может содержать вредоносный код (подробнее см. здесь). Поэтому при попытке интерактивно открыть внешнюю обработку (отчет) у пользователя будет запрошено разрешение на выполнение этой операции.

Рис. 145. Предупреждение безопасности при открытии внешней обработки (отчета)
Если в данном диалоге ответить Да, то это разрешение будет запомнено и последующие открытия данной обработки (отчета) будут происходить без вопросов. Если ответить Нет, то обработка (отчет) не будет открыта. При следующем открытии вопрос будет задан повторно.
Для программной работы внешняя обработка (отчет) может быть расположена:
● в файле, который расположен в конфигурации (например, в макете);
● в данных информационной базы;
● во временном хранилище (см. здесь).
Имена внешних обработок (отчетов) должны быть уникальны в пределах сеанса. Если осуществляется подключение (программное или интерактивное) внешней обработки (отчета) с именем, повторяющим имя уже загруженной в данном сеансе внешней обработки (отчета), то будет произведено отключение старой обработки и подключение новой.
Примечание. При работе внешних обработок (отчетов) в толстом клиенте следует учитывать, что при работе в режиме управляемого приложения возможно открытие только управляемых форм, при работе в обычном режиме – только обычных форм.
При использовании внешних обработок (отчетов) нужно иметь в виду следующие особенности:
● Если подключена новая обработка (отчет) с таким же именем, как и подключенная обработка (отчет), то открытые формы от «старой» обработки (отчета) перестают работать (генерируется ошибка).
● При подключении внешней обработки (отчета), если подключаемая обработка (отчет) двоично идентична уже подключенной и совпадает признак безопасного режима, реального переподключения не происходит, ошибки при этом не выдается. В противном случае ранее подключенная внешняя обработка (отчет) отключается и выполняется новое подключение внешней обработки (отчета).
● При выполнении метода Создать(), параметр метода БезопасныйРежим игнорируется, если ранее было выполнено подключение внешней обработки (отчета) с помощью метода Подключить(). Если подключение ранее не выполнялось, то будет выполнено подключение внешней обработки (отчета) с использованием параметра БезопасныйРежим из метода Создать().
● При программном подключении внешней обработки (отчета) с помощью метода Подключить(), имеется возможность указать, будет выполняться контроль опасных действий или нет. Для этого следует использовать параметр метода ЗащитаОтОпасныхДействий.
● При получении формы для внешней обработки (отчета) будет найдена открытая форма независимо от того, открыта она для подключенной сейчас обработки или для той, которая была подключена ранее (с тем же именем).
● При открытии обработки (отчета) с помощью команды главного меню Файл – Открыть, форма обработки (отчета) открывается методом ОткрытьФорму() с параметром Уникальность, равным значению Истина, чтобы можно было открыть новую форму обработки в случае ее изменения.
● Если явно не указано, то все вышеописанные особенности в равной степени применяются как для внешней обработки (отчета) открытой интерактивно, так и программно.
5.12.2.4. Редактирование внешней обработки (отчета)
Редактирование внешней обработки (отчета) выполняется в конфигураторе. Чтобы открыть существующую внешнюю обработку (отчет), следует выбрать пункт Файл – Открыть. В выданном на экран стандартном диалоге выбрать тип файла, соответствующий формату сохранения внешней обработки (отчета) и указать имя открываемого файла.
При открытии внешней обработки (отчета) в конфигураторе автоматически открывается окно редактирования объекта. В отличие от других объектов конфигурации, отладка внешней обработки (отчета) может производиться без перезапуска системы «1С:Предприятие». Достаточно после сохранения обработки (отчета) конфигуратором заново вызвать ее на выполнение в режиме 1С:Предприятие (только для обработки (отчета), сохраненной в формате .epf/.erf).
В диалоге редактирования внешней обработки (отчета) имеется возможность сделать копию внешней обработки (отчета) не изменяя собственно редактируемый объект. Для этого необходимо выполнить команды Действия – Выгрузить в файлы. При этом кроме создания копии внешней обработк (отчета) имеет возможность выбрать формат выгрузки (см. здесь). Во время этой операции система по уолчанию предлагает формат выгрузки, отличный от текущего формата. Т.е. если редактируется внешняя обработка (отчет) в формате .epf/.erf, то будет предложен формат XML и наоборот. Имеется возможность заместить редактируемую внешнюю обработку (отчет) на другую внешнюю обработку (отчет), которая находится в файле (в любом из поддерживаемых форматов).
При выгрузке/загрузки внешней обработки (отчета) в/из файла предоставляется возможность изменять вид объекта, не меняя его у редактируемого объекта. Например, можно выгрузить редактируемую внешнюю обработку как внешний отчет или наоборот, при этом редактируемый объект останется того вида, каким он был до выполнения операции.
5.12.2.5. Справочная информация
Внешняя обработка (отчет) может быть снабжена пользовательским описанием. Для редактирования описания в палитре свойств внешней обработки нужно щелкнуть ссылку Открыть свойства Справочная информация.
В режиме 1С:Предприятие для просмотра описания внешней обработки (отчета) необходимо нажать клавишу F1.
5.12.2.6. Внешние обработки (отчеты) и объекты конфигурации
5.12.2.6.1. Общая информация
Существующие в конфигурации объекты типа Отчет и Обработка могут быть преобразованы во внешние отчеты и обработки, и наоборот, внешние отчеты и обработки могут заменять собой существующий объект конфигурации типа Отчет или Обработка. Также внешние отчеты и обработки могут быть добавлены в структуру конфигурации как новые объекты конфигурации типа Отчет или Обработка.
При работе с внешней обработкой (отчетом) имеется возможность выбирать формат сохраняемого объекта. Это выполняется в диалоге сохранения или открытия файла с помощью выпадающего списка Тип файла. В зависимости от этого, обработка (отчет) будут сохранены или в формате .epf/.erf или в формате XML (подробнее см. здесь). Далее в этом разделе не будет отдельно освещаться выбор формата внешней обработки (отчета).
5.12.2.6.2. Копирование обработки (отчета) во внешнюю обработку (отчет)
Существующий объект конфигурации типа Отчет или Обработка может быть скопирован во внешнюю обработку или отчет. Для этого нужно выделить наименование объекта конфигурации в окне Конфигурация и в контекстном меню объекта конфигурации выбрать пункт Сохранить как внешнюю обработку, отчет.
В результате будет создана внешняя обработка (отчет), которая будет копией выбранного объекта конфигурации. Сам объект конфигурации при этом не изменится.
Выполнение этой операции целесообразно для последующей отладки создаваемой обработки (отчета). По окончании отладки внешняя обработка (отчет) может быть вставлена в конфигурацию взамен существующего объекта конфигурации. Следует помнить, что для исполнения в режиме 1С:Предприятия, обработку (отчет) следует сохранять в формате .epf/.erf, а не в формате XML-файлов.
5.12.2.6.3. Замена обработки (отчета) на внешнюю обработку (отчет)
Внешние обработки (отчеты) могут заменить собой существующий объект конфигурации типа Обработка или Отчет. Для замены объекта конфигурации внешней обработкой (отчетом) необходимо выделить его наименование в окне Конфигурация и использовать пункт Заменить на внешнюю обработку, отчет контекстного меню объекта конфигурации.
5.12.2.6.4. Добавление внешней обработки (отчета) в структуру конфигурации
Существующая внешняя обработка (отчет) может быть вставлена в структуру конфигурации как новый объект конфигурации типа Обработка или Отчет. Для этого необходимо в структуре конфигурации выделить наименование любого объекта конфигурации типа Обработка или Отчет и использовать пункт Вставить внешнюю обработку, отчет контекстного меню объекта конфигурации. В результате этих действий в дереве конфигурации появится новая обработка (отчет).
5.12.2.7. Сравнение и объединение внешних обработок (отчетов)
Внешние обработки (отчеты) можно сравнивать и объединять с обработками (отчетами), расположенными в конфигурации, а также сравнивать и объединять с другими внешними обработками (отчетами).
Для сравнения и объединения с отчетом или обработкой конфигурации в окне Конфигурация следует указать нужный объект, в контекстном меню этого объекта выбрать пункт Сравнить, объединить с внешней обработкой, отчетом… В стандартном диалоге выбора файла выбрать нужную внешнюю обработку (отчет).
На экран выводится окно Сравнение и объединение…. Приемы работы в окне полностью совпадают с приемами работы при объединении конфигураций (см. здесь).

Рис. 146. Объединение обработок
Для сравнения или объединения внешней обработки (отчета) с другой внешней обработкой (отчетом) нужно открыть исходную внешнюю обработку (отчет), в окне редактирования нажать кнопку Действия и в выпадающем меню выбрать пункт Сравнить, объединить с внешней обработкой, отчетом. В стандартном диалоге выбора файла выбрать нужную внешнюю обработку (отчет). Описание дальнейших действий см. здесь.
5.13. Планы видов характеристик
5.13.1. Общее описание
При разработке прикладных решений часто возникают вопросы организации хранения некоторых свойств прикладных объектов, состав и тип которых заранее (на этапе разработки прикладного решения) не известен.
В качестве примера таких свойств можно привести:
● Для номенклатуры можно указать такие характеристики, как цвет, размер, габаритные размеры и т. д.
● Для контрагента можно указать такие характеристики как федеральный округ, в котором расположен контрагент, признак постоянного покупателя и т. д.
● Для плана счетов можно указать количество и тип разрезов аналитического учета (для конкретного счета). Затем для каждой проводки указываются конкретные значения разрезов аналитического учета. Более подробно об организации аналитического бухгалтерского учета см. здесь.
Список таких свойств (далее будем называть их характеристиками) во время разработки не определен ни по составу, ни по типу хранимых данных. Также возможна ситуация, когда перечень таких характеристик достаточно большой и может быть не востребован каждым пользователем прикладного решения. Следует отметить, что набор характеристик может различаться для разных групп объектов, например, для одной группы элементов номенклатуры используются такие характеристики, как цвет и размер, а для другой – только характеристика, описывающая габаритные размеры. Также следует отметить, что характеристики могут вводиться в процессе эксплуатации сами пользователи системы.
Можно предложить два способа решения задачи:
● Для каждой характеристики заводится отдельный реквизит нужного типа в соответствующем объекте. У этого подхода есть несколько недостатков:
● Каждая характеристика – это отдельное поле таблицы базы данных, которое будет занимать место в базе данных вне зависимости от того, используется характеристика или нет.
● При большом количестве характеристик количество «лишних» полей будет очень большим, с ними (полями) будет неудобно работать как разработчику, так и пользователю.
● При необходимости добавить новую характеристику придется дорабатывать прикладное решение: добавлять новый реквизит, везде в прикладном решении учитывать добавленный реквизит. Это трудоемко и неудобно.
● Использовать специальный объект, в котором описываются характеристики с указанием того, как называется характеристика, какого она типа и т. д. Эта схема лишена недостатков предыдущей: для добавления новой характеристики нет необходимости изменять прикладное решение, не расходуется избыточное место в базе данных. Также имеется возможность самому пользователю добавлять новые характеристики объектов. Система «1С:Предприятие» представляет такой объект. Он называется план видов характеристик.
Способ не лишен недостатков. К таковым можно отнести более сложную логику организации и использования характеристик. Однако, затраты, связанные с усложнением прикладного решения, будут понесены только один раз – при разработке решения. По мере увеличения количества (и типов) характеристик, дополнительная модернизация прикладного решения будет не нужна.
План видов характеристик также можно использоваться для организации аналитического учета в бухгалтерском учете. В этом случае каждый элемент (с уникальным набором типов) будет являться видом субконто и при редактировании счета в плане счетов можно указать виды субконто, используемые для конкретного счета. При формировании проводки, для заполнения будет использоваться состав субконто (соответствующего типа), какой был задан при редактировании плана счетов. Подробнее об использовании плана видов характеристик для организации аналитического учета см. здесь и см. здесь.
5.13.2. Характеристики объектов конфигурации
5.13.2.1. Общая информация
План видов характеристик является центральным элементом механизма характеристик:

Рис. 147. Общая схема работы с характеристиками
План видов характеристик (см. рис. 147) хранит набор типов, которые могут быть указаны для элементов плана видов характеристик (видов характеристик) – поле Тип значения характеристик. Также план видов характеристик содержит информацию о возможности создания характеристик, для описания значений которых в информационной базе отсутствуют необходимые объекты. Для этого используется поле Дополнительные значения характеристик и указание нужного типа в списке Тип значения характеристик.
При создании вида характеристики (элемента плана видов характеристик) можно указать, каким набором типов будут ограничены значения этого вида характеристик. При этом набор типов, заданный для плана видов характеристик в целом, можно ограничить для конкретного вида характеристики, но нельзя расширить.

Рис. 148. Задание типа характеристики
Для тех объектов метаданных, для которых планируется вести учет характеристик, с помощью диалога Дополнительные характеристики объекта метаданных (см. рис. 147), указываются правила отбора видов характеристик и правила получения значений характеристик для конкретных объектов данных. Фактически, указываются следующие правила:
● Как получить виды характеристик для конкретного объекта данных – правила отбора. По указанным правилам система формирует запрос, выполняющий получение списка видов характеристик. Этот запрос формируется с использованием ключевого слова РАЗРЕШЕННЫЕ. В результате, в список попадут только те виды характеристик, на которые у пользователя есть права, которые определяются наложенными на таблицу со списком характеристик ограничениями доступа к данным (см. здесь).
● Как получить значение характеристики, зная объект данных и вид характеристики – правила получения значений. По указанным правилам система формирует запрос, который выполняет получение значений характеристик. Данный запрос не является самостоятельным, а формирует таблицу, которая соединяется с основным запросом, который получает прикладные данные. Поэтому использование или не использование ключевого слова РАЗРЕШЕННЫЕ определяется основным запросом.
В свойствах реквизитов объектов, используемых в механизме работы с характеристиками, требуется указание некоторых свойств метаданных, необходимых системе для автоматической подготовки данных при работе пользователя.
После того, как завершены все настройки и сформирован список видов характеристик (в виде предопределенных элементов плана видов характеристик в режиме Конфигуратора или в виде значений, введенных в режиме «1С:Предприятия») можно редактировать значения характеристик для конкретного объекта данных.

Рис. 149. Редактирование значения характеристики
Если на форме есть поля, отвечающие за объект данных, вид характеристики и значение характеристики, то процесс редактирование выглядит следующим образом:
● Пользователь выбирает объект данных (поле Объект, рис. 149), для которого необходимо редактировать список характеристик. Например, элемент какого-либо справочника.
● Для этого объекта система формирует список доступных видов характеристик. При формировании этого списка используются правила отбора видов характеристик, указанные для объекта метаданных.
● На основании информации из плана видов характеристик, система определяет состав типов редактируемого значения, и выполняет настройку элементов формы (связи параметров выбора, связь по типу и т. д.).
● Теперь пользователь может выбирать необходимые виды характеристик (поле Вид характеристики, рис. 149) и задавать для них значения характеристик (поле Значение характеристики, рис. 149).
При использовании характеристик в отчетах (см. здесь) и динамических списках (см. здесь) используется похожая схема работы.
В некоторых случаях для реализации механизма характеристик (примеры такой реализации приведены далее) может потребоваться сокращенный набор объектов. Однако использование плана видов характеристик требуется при любом наборе используемых объектов.
5.13.2.2. Редактирование плана видов характеристик
По своему устройству план видов характеристик похож на справочник (см. здесь). План видов характеристик может быть иерархическим, содержать предопределенные элементы (см. здесь), обладать реквизитами и табличными частями и т. д. Ключевым отличием плана видов характеристик от справочника является свойство Тип значения характеристик. Данное свойство описывает перечень типов, которые в дальнейшем могут быть указаны в качестве типа (одного или нескольких) значения конкретного вида характеристики. Возможность такого выбора типа(-ов) не требует изменения структуры и программного кода прикладного решения. Также следует отметить, что для задания типа реквизита, хранящего значение характеристики, связанной с конкретным планом видов характеристик, служит специальный тип Характеристика.<ИмяПланаВидовХарактеристик>. Реквизит, для которого указан такой тип, не может быть составного типа.
Если в состав свойства Тип значения характеристик входят типы Число, Дата, СправочникСсылка.Номенклатура и СправочникСсылка.Контрагенты, то появляется возможность создать вид характеристики Размер с типом Число или вид характеристики Поставщик с типом СправочникСсылка.Контрагенты. Однако нельзя создать вид характеристики с типом Булево, т. к. этот тип не входит в состав свойства Тип значения характеристик. В связи с этим следует тщательно подходить к выбору набора типов при создании плана видов характеристик.

Рис. 150. Свойство «Тип значения характеристик»
При выборе в свойстве Тип значения характеристик примитивных типов Число, Строка или Дата, в диалоге редактирования типа данных следует указать размерность или состав типа с таким расчетом, чтобы данное описание охватывало все возможные значения. Так, если не указать дробную часть у числового типа, то будет невозможно ввести дробное число.
Внимание! Изменение в описании списка типов, используемых видов характеристик, после ввода пользовательских значений, может привести к потере значений, введенных пользователем. Например, если из списка типов исключить какой-либо тип, то значения характеристик, связанных с исключенным типом, будут очищены. Если исключенный тип был единственным типом для вида характеристик, то новым типом этого вида характеристик станут все типы, указанные в свойстве Тип значения характеристик.
Создание плана видов характеристик не является единственным шагом при реализации механизма учета характеристик для объектов метаданных. В зависимости от поставленной задачи, необходимо создавать дополнительные объекты метаданных и особым образом их настраивать. Далее будут рассмотрены несколько примеров реализации механизма характеристик.
5.13.2.3. Примеры реализации механизма характеристик
1. Самый простой пример механизма учета характеристик. Для каждого объекта метаданных создается свой план видов характеристик и регистр сведений, который хранит значения характеристик. Подробнее см. здесь.
2. В данном примере рассматривается случай, когда необходимо создавать виды характеристик таких типов, которые не описаны в прикладном решении. При этом сохраняются все возможности предыдущего примера. Подробнее см. здесь.
3. Этот пример следует использовать при необходимости использовать один план видов характеристик для описания видов характеристик всех необходимых объектов метаданных, а для хранения значений характеристик использовать один регистр сведений. Подробнее см. здесь.
4. Такой пример следует использовать в тех случаях, когда необходимо использовать один и тот же вид характеристик для различных объектов метаданных (наборы характеристик). При этом значения характеристик хранятся в регистре сведений. Подробнее см. здесь.
5. Если доступ к характеристикам и их значениям должен ограничиваться с помощью механизма ограничения доступа к данным, наложенным на сам объект, то можно воспользоваться этим примером реализации механизма. Подробнее см. здесь.
Примечание 1. Примеры, приведенные в данном разделе, не являются законченным. Они предназначены для демонстрации различных механизмов работы с характеристиками.
Примечание 2. Приведенный выше список примеров учета характеристик не является исчерпывающим. Он призван только продемонстрировать основные примеры такого учета.
5.13.2.3.1. Пример 1
Задача
Виды характеристик хранятся в плане видов характеристик и при этом один план видов характеристик «обслуживает» один объект метаданных. Т.е. для справочника Номенклатура создается план видов характеристик ХарактеристикиНоменклатуры, для справочника Контрагенты – ХарактеристикиКонтрагентов и т. д. Сами значения характеристик для конкретных объектов будут храниться в регистрах сведений. Каждый регистр сведений будет хранить информацию о данных, видах характеристик и значениях характеристик одной пары «объект метаданных – план видов характеристик». Для простоты будет рассматриваться один объект метаданных, один план видов характеристик и один регистр сведений.
Реализация
В регистре сведений, предназначенном для хранения значений характеристик, следует создать два измерения и один ресурс. Измерения будут отвечать за объект, для которого хранится значение характеристики, и вид характеристики, а ресурс будет хранить само значение характеристики.

Рис. 151. Регистр сведений «ЗначенияХарактеристикНоменклатуры»
Рассмотрим регистр (с именем ЗначенияХарактеристикНоменклатуры) более подробно:
● Объект – измерение. Содержит ссылку на объект метаданных, для которого хранится значение характеристики. Измерение будет иметь тип того объекта метаданных, для которого будут храниться характеристики. В рассматриваемом примере это будет тип СправочникСсылка.Номенклатура.
Для измерения следует установить свойство Ведущее, что позволит автоматически удалять значения характеристик объекта при его (объекта) удалении и позволит открывать список характеристик непосредственно из формы объекта (соответствующая ссылка в панели навигации формы).
● ВидХарактеристики – измерение. Содержит ссылку на вид характеристики (в качестве типа значения необходимо указать ПланВидовХарактеристикСсылка.ХарактеристикиНоменклатуры). В данное измерение будут попадать значения из плана видов характеристик.
● ЗначениеХарактеристики – ресурс. Хранит значение одного из типов, выбранных в качестве типа значения вида характеристики, указанной в измерении ВидХарактеристики. Типом значения ресурса будет Характеристика. ХарактеристикиНоменклатуры. Невозможно указать для данного ресурса составной тип, состоящий из нескольких типов Характеристика. Именно поэтому для хранения значений характеристик (в рамках рассматриваемого примера) нужно использовать несколько регистров сведений (по одному на каждую пару «объект метаданных – план видов характеристик»).
Для ресурса необходимо в свойство Связи параметров выбора (см. здесь) добавить параметр с именем Отбор.Владелец, связанный с измерением ВидХарактеристики и с режимом использования Очищать. Такая настройка при редактировании в форме обеспечит очистку значения характеристики при смене вида характеристики.

Рис. 152. Настройки ресурса «Значение»
Также следует заполнить свойство ресурса Связь по типу. В это свойство следует указать измерение ВидХарактеристики. После указания связи начнет действовать одна из особенностей объекта План видов характеристик: в зависимости от того, какой вид характеристики указан в измерении ВидХарактеристики, система будет автоматически изменять перечень доступных типов для ресурса ЗначениеХарактеристики.
Следующим шагом следует указать системе, как связаны объект, для которого будут учитываться характеристики, план видов характеристик и регистр сведений, который хранит значения характеристик объектов. Это следует сделать с помощью окна Дополнительные характеристики объекта метаданных, вызвать которое можно из контекстного меню объекта метаданных (пункт Характеристики).

Рис. 153. Описание характеристик справочника «Номенклатура»
В данном окне описывается, какой объект и каким образом обеспечивает виды характеристик (левая часть окна) и где хранятся значения характеристик (правая часть окна). В рассматриваемом примере:
● Виды характеристик находятся в плане видов характеристик ХарактеристикиНоменклатуры (поле Виды характеристик).
● Вид характеристики и ее представление будет получено из элемента плана видов характеристик. Стандартный реквизит плана видов характеристик Ссылка будет выступать в качестве ключевого поля (свойство Поле ключа) для поиска необходимого элемента плана видов характеристик.
Описание хранения будет использовано системой в тех случаях, когда необходимо получить перечень значений характеристик для какого-либо объекта метаданных.

Рис. 154. Значения характеристик
Например, для получения списка значений отбора в динамическом списке. В данном примере описана следующая схема хранения значений характеристик:
● Для хранения используется регистр сведений ХарактеристикиНоменклатуры (свойство Значения характеристик).
● Для хранения ссылки на объект, для которого задаются значения характеристик, используется измерение Объект (типа СправочникСсылка.Номенклатура). Это указывается в свойстве Поле объекта.
● Для хранения ссылки на характеристику объекта используется измерение ВидХарактеристики (свойство Поле вида).
● Значение характеристики хранится в ресурсе ЗначениеХарактеристики (свойство Поле значения).
В общем случае, в качестве объекта для хранения значений характеристик может служить любой объект, в котором существуют реквизиты необходимых типов, а именно:
● Реквизит типа того объекта, для которого хранится значение характеристики – поле объекта.
● Реквизит типа плана видов характеристик, который хранит собственно характеристику – поле вида.
● Реквизит типа значения характеристики (собственно значение характеристики) – поле значения.
При редактировании поля диалога Значения характеристик система предоставит выбор только из тех объектов, которые удовлетворяют выше описанным требованиям (при этом должно быть обязательно заполнено поле Виды характеристик в этой строке, где выполняется редактирование). Редактирование характеристик доступно для следующих объектов метаданных:
● Справочники,
● Документы,
● Перечисления,
● Планы видов характеристик,
● Планы счетов,
● Планы видов расчета,
● Планы обмена,
● Бизнес-процессы,
● Задачи.
Результат
Реализация данного примера позволит:
● В плане видов характеристик создавать виды характеристик, которые необходимы для элементов «своего» объекта метаданных.
● Для каждого элемента справочника Номенклатура указывать собственный набор характеристик и указывать для каждого вида характеристик необходимое значение характеристики.
5.13.2.3.2. Пример 2
Задача
Рассмотрим ситуацию, когда пользователю необходимо добавить характеристику, для которой в прикладном решении нет подходящего типа. Например, для номенклатуры необходимо учитывать цвет, а такой справочник в прикладном решении отсутствует.
Для реализации такой задачи необходимо создать специальный справочник, который будет являться хранилищем дополнительных значений характеристик. Этот справочник будет являться подчиненным для плана видов характеристик. Затем надо будет указать этот справочник в специальном свойстве плана видов характеристик – Дополнительные значения характеристик. Также этот справочник нужно будет указать в качестве одного из возможных типов свойства Тип значения характеристик.
Реализация
Создадим справочник, который будет хранить дополнительные значения характеристик (он будет называться ЗначенияХарактеристик). Все остальные объекты прикладного решения будут эквивалентны объектам из примера 1 (см. здесь). Затем следует выполнить следующие действия с данным справочником:
● Указать для справочника ЗначенияХарактеристик план видов характеристик в качестве владельца. В результате для каждого вида характеристики будет доступен тот набор значений, который указан именно для этого вида характеристики.

Рис. 155. Владелец справочника «ЗначенияХарактеристик»
● Указать справочник ЗначенияХарактеристик в качестве одного из значений составного типа для свойства Тип значений характеристик плана видов характеристик ХарактеристикиНоменклатуры.
● Выбрать справочник ЗначенияХарактеристик в качестве значения свойства Дополнительные значения характеристик плана видов характеристик.

Рис. 156. Свойство «Дополнительные значения характеристик»
Настройки, которые были выполнены в окне Дополнительные характеристики объекта метаданных для справочника Номенклатура, не изменяются.
Результат
Реализация данного примера позволит:
● Создавать виды характеристик, для хранения значений (дополнительных значений характеристик) которых в прикладном решении нет подходящих типов.
● Указывать в качестве значений характеристик дополнительные значения характеристик.
5.13.2.3.3. Пример 3
Задача
Этот пример можно рассмотреть при необходимости использовать для описания видов характеристик всех объектов метаданных один план видов характеристик, а для хранения значений характеристик использовать один регистр сведений. Разделение видов характеристик между объектами метаданных будет выполняться с помощью реквизита плана видов характеристик. Значение этого реквизита будет определять «принадлежность» конкретному объекту (реквизит содержит значение) или всем объектам метаданных (реквизит не задан).
Реализация
Необходимо создать план видов характеристик (с именем ХарактеристикиОбъектов). У созданного объекта следует создать реквизит ТипВидаХарактеристики типа Перечисление.ВидыОбъектов. Состав перечисления будет определять те объекты метаданных, для которых будут храниться виды характеристик.
Примечание. Для ускорения отборов нужных видов характеристик, желательно для реквизита ТипВидаХарактеристики установить свойство Индексировать в значение Индексировать с доп. упорядочиванием.
Для хранения значений реквизитов следует создать регистр сведений с именем ЗначенияХарактеристикОбъектов, при этом его состав и настройки следует взять из примера 1 (регистр ЗначенияХарактеристикНоменклатуры, см. здесь). Отличие от примера 1 заключается в том, что тип измерения Объект будет составного типа и в состав типов должны входить все ссылочные типы, для которых планируется вести учет характеристик.
Аналогично примеру 2 следует создать справочник для учета дополнительных значений характеристик (см. здесь).
В результате должна получиться следующая структура объектов метаданных:

Рис. 157. Структура конфигурации
В данном примере предполагается, что характеристики буду учитываться только для справочников Номенклатура и Контрагенты.
Рис. 158. Задание принадлежности характеристики
Теперь следует «объяснить» системе, как выполнять отбор видов характеристик для того или иного объекта метаданных (это необходимо проделать для каждого объекта, обладающего характеристиками):
● В каком объекте расположен список характеристик.
● По какому ключевому полю будет происходить получение конкретной характеристики для определения типа значения (вида характеристики) и представления характеристики.
● По какому реквизиту характеристики (и с каким значением отбора) будет определяться список характеристик, связанных с конкретным объектом метаданных.
Далее приведен пример указания правила отбора характеристик для справочника Номенклатура.

Рис. 159. Привязка характеристик к объекту метаданных
Настройка, выполняемая в окне Дополнительные характеристики объекта метаданных аналогична рассмотренной в примере 1 (см. здесь). Дополнительно указываются значения двух полей:
● В свойстве Поле отбора видов указывается, какой реквизит плана видов характеристик, является ключевым полем, по которому буду отбираться виды характеристик для того или иного объекта метаданных. В данном примере это реквизит ТипВидаХарактеристики плана видов характеристик.
● Свойство Значение отбора видов содержит значение, которое должно содержаться в реквизите, указанном в свойстве Поле отбора видов, чтобы элемент плана видов характеристик (указанный в свойстве Виды характеристик) считался «подходящим» для нужного объекта метаданных. В данном примере настройка выполняется для справочника Номенклатура, поэтому в свойство Значение отбора видов выбрано значение перечисления ВидыОбъектов.Номенклатура.
Если в прикладном решении существуют виды характеристик, которые могут использовать со всеми объектами, для которых ведется учет характеристик, то систему можно настроить таким образом, чтобы в списки характеристик выводились и виды характеристик, «принадлежащие» объекту метаданных и «общие» виды характеристик. Для этого необходимо добавить в окно настройки характеристик еще одну строку:

Рис. 160. Отбор «свободных» характеристик
При этом «общими» будут считаться те виды характеристик, в которых значение реквизита ТипВидаХарактеристики не заполнено. Хранение значений характеристик описывается аналогично примеру 1 (см. здесь).
Расширение
Если в рассматриваемом примере потребуется реализовать поддержку характеристик для нового объекта метаданных, то необходимо выполнить следующие действия:
● В перечисление ВидыОбъектов добавить нужное значение.
● В список типов измерения Объект регистра ЗначенияХарактеристикОбъектов добавить тип, соответствующий объекту метаданных, для которого добавляется учет характеристик.
● Для объекта заполняются свойства в окне Дополнительные характеристики объекта метаданных, по аналогии с вышеописанными примерами.
Результат
Реализация данного примера позволит:
● Использовать для хранения видов характеристик всех объектов один план видов характеристик.
● Разделять виды характеристик на «принадлежащие» конкретным объектам и общие для всех объектов.
5.13.2.3.4. Пример 4
Задача
Данный пример можно использовать в тех случаях, когда один вид характеристики необходимо использовать для нескольких объектов метаданных. Например, вид характеристики Срок поставки может использоваться и для контрагента (например, он будет означать срок поставки товаров данным контрагентом) и для товара (в этом случае он будет означать, например, срок поставки данного товара). Реализация данной задачи с помощью предыдущего примера (см. здесь) потребует создания нескольких видов характеристик, «привязанных» к конкретным объектам метаданных и имеющих одинаковые имена (для упрощения идентификации).
Схема, удовлетворяющая вышеописанным требованиям, выглядит следующим образом:
● План видов характеристик хранит список видов характеристик.
● В предопределенных данных специального объекта (справочника) хранятся наборы характеристик – т. е. перечень характеристик, которые могут быть заданы объектам метаданных, для которых выбрана возможность указания характеристик. Список доступных характеристик задается в режиме «1С:Предприятие», а не в конфигураторе.
● Значения характеристик хранятся в регистре сведений.
Реализация
Рассмотрим эту схему более подробно на примере справочника Номенклатура. План видов характеристик аналогичен предыдущим примерам. Для хранения допустимых наборов характеристик нужно создать специальный справочник (с именем НаборыХарактеристик). В этом справочнике нужно создать табличную часть СоставНабора, в которой создать единственный реквизит ВидХарактеристики (типа ссылка на план видов характеристик ПланВидовХарактеристикСсылка.ХарактеристикиОбъектов), а так же предопределенные элементы в количестве, совпадающем с количеством объектов метаданных, для которых следует учитывать характеристики. В рассматриваемом случае в этом справочнике следует завести один элемент для справочника Номенклатура.

Рис. 161. Хранение списка характеристик в табличной части справочника
Регистр сведений, в котором хранятся значения характеристик для объектов, аналогичен регистру, предложенному в примере 3 (см. здесь).
Следующим шагом необходимо настроить связь между объектом метаданных, объектом, хранящим список характеристик и объектом, хранящим значения выбранных характеристик:

Рис. 162. Интерактивная настройка характеристик
В результате получается следующая схема:
● Представление и типы значений характеристики получаются с помощью косвенной адресации. Для этого используется свойство Поле ключа окна настройки характеристик.
● Для получения списка доступных характеристик (для справочника Номенклатура) используется предопределенный элемент Номенклатура справочника НаборыХарактеристик. Для этого в свойстве Поле отбора видов указано, что нужный элемент из справочника НаборыХарактеристик будет отбираться по ключевому полю Ссылка. Значением отбора (свойство Значение отбора видов) является ссылка на предопределенный элемент.
● Хранение значений характеристик не отличается от ранее рассмотренных примеров.

Рис. 163. Косвенная адресация плана видов характеристик
Рассматриваемая схема хранения списка характеристик не обеспечивает автоматического формирования списка выбора характеристик при добавлении в объект новой характеристики (из перечня доступных). Для формирования такого списка следует особым образом сформировать форму выбора объекта метаданных план видов характеристик.
Для этого, с помощью конструктора, необходимо создать форму выбора объекта метаданных план видов характеристик. В созданной форме следует установить флажок Произвольный запрос для основного реквизита формы (реквизит Список типа ДинамическийСписок) и задать следующий запрос в качестве источника динамического списка:
Копировать в буфер обменаВЫБРАТЬ
ПланВидовХарактеристик.Ссылка,
ПланВидовХарактеристик.Код,
ПланВидовХарактеристик.Наименование,
ПланВидовХарактеристик.ТипЗначения
ИЗ
ПланВидовХарактеристик.ХарактеристикиОбъектов КАК ПланВидовХарактеристик
{ВНУТРЕННЕЕ СОЕДИНЕНИЕ Справочник.НаборыХарактеристик.СоставНабора КАК СоставНабора
ПО ПланВидовХарактеристик.Ссылка = СписокХарактеристик.ВидХарактеристики}
{ГДЕ
СписокХарактеристик.Ссылка.* КАК НаборХарактеристик}
Также следует указать в качестве основной таблицы динамического списка ПланВидовХарактеристик.ХарактеристикиОбъектов и установить флажок Динамическое считывание данных.

Рис. 164. Форма выбора плана видов характеристик
В модуле формы необходимо определить обработчик события ПриСозданииНаСервере:
Копировать в буфер обмена&НаСервере Процедура ПриСозданииНаСервере(Отказ, СтандартнаяОбработка) Предопределенные = Новый Соответствие; Предопределенные.Вставить(Тип("СправочникСсылка.Номенклатура"), Справочники.НаборыХарактеристик.Номенклатура); Если НЕ Параметры.Свойство("ОбъектОтбораВидовХарактеристик") Тогда Возврат; Иначе ОбъектОтбора = Параметры.ОбъектОтбораВидовХарактеристик; ТипОбъектаОтбора = ТипЗнч(ОбъектОтбора); Если Предопределенные.Получить(ТипОбъектаОтбора) <> Неопределено Тогда НовыйЭлемент = Список.Отбор.Элементы.Добавить(Тип("ЭлементОтбораКомпоновкиДанных")); НовыйЭлемент.ЛевоеЗначение = Новый ПолеКомпоновкиДанных("НаборХарактеристик"); НовыйЭлемент.ВидСравнения = ВидСравненияКомпоновкиДанных.Равно; НовыйЭлемент.ПравоеЗначение = Предопределенные[ТипОбъектаОтбора]; НовыйЭлемент.Использование = Истина; КонецЕсли; КонецЕсли; КонецПроцедуры
Подробнее рассмотрим особенности реализации формы выбора. Для указания, из какого элемента справочника НаборыХарактеристик следует получить список доступных характеристик, используется параметр формы ОбъектОтбораВидовХарактеристик. Этот параметр присутствует у расширения управляемой формы для плана видов характеристик. Если параметр формы указан (как это сделано при создании реквизита ВидХарактеристики табличной части Характеристики справочника Номенклатура), то анализируется тип этого параметра и проверяется, есть или нет предопределенный элемент справочника НаборыХарактеристик для этого типа (в соответствии Предопределенные, которое заполняется «вручную»). Если в соответствии задан требуемый тип (и, следовательно, существует необходимый предопределенный элемент) – выполняется установка отбора динамического списка с именем НаборХарактеристик. Если параметр формы ОбъектОтбораВидовХарактеристик не указан или для типа значения, указанного в параметре, не задано предопределенного значения – отбор не устанавливается, и будет отображаться весь список.
Следует также обратить внимание на то, каким образом сформирован запрос, выступающий в качестве источника динамического списка, для реализации описанного поведения. Такое поведение достигается благодаря тому, что отбор и соединение указаны как конструкции расширения языка запросов для системы компоновки данных (см. здесь). Если отбор не указан, то система компоновки данных (которая используется для работы динамического списка) не будет включать в результирующий запрос ни соединение, ни отбор. Следовательно, в список выбора попадут все виды характеристик. Такое поведение будет использовано при добавлении вида характеристики в список доступных характеристик.
Расширение
Если в описанный пример необходимо добавить поддержку характеристик для еще одного объекта метаданных, то следует выполнить следующие действия:
● В справочнике НаборыХарактеристик создать новый предопределенный элемент.
● Для «нового» объекта метаданных следует настроить связь между объектом конфигурации и справочником НаборыХарактеристик (по аналогии с примером из данного раздела).
● В форме выбора плана видов характеристик добавить нужный тип в код заполнения соответствия Предопределенные. Например, для справочника Контрагенты добавляемая строчка будет выглядеть следующим образом (предопределенный элемент справочника НаборыХарактеристик будет называться Контрагенты):
Копировать в буфер обменаПредопределенные.Вставить(Тип("СправочникСсылка.Контрагенты"), Справочники.НаборыХарактеристик.Контрагенты);
● Расширить тип измерения Объект регистра сведений ЗначенияХарактеристикОбъектов, добавив в него тип «нового» объекта метаданных.
● В режиме «1С:Предприятие» заполнить табличную часть нового предопределенного элемента допустимыми видами характеристиками.
Результат
Реализация данного примера позволит:
● Вести единый список видов характеристик для всех объектов метаданных, для которых нужно вести учет характеристик.
● Формировать, в режиме «1С:Предприятия», для каждого объекта метаданных список допустимых видов характеристик.
5.13.2.3.5. Пример 5
Если доступ к характеристикам и их значениям должен ограничиваться с помощью ограничений доступа к данным (см. здесь), наложенным на сам объект (например, пользователь может изменять характеристики товара только тогда, когда он может изменять сам товар), то можно воспользоваться хранением характеристик (и их значений) в табличных частях справочников, документов и других объектов, для которых доступно создание табличных частей.
При этом можно выделить несколько особенностей такого способа хранения характеристик:
● Если необходимо использовать один и тот же вид характеристики для работы с несколькими объектами метаданных (например, характеристика Поставщик может быть и у товара и у контрагента), то хранение характеристик в табличной части позволит использовать один элемент плана видов характеристик в обоих случаях. В противном случае будет необходимо создать два вида характеристики и особым образом указать, к какому объекту метаданных относится каждый вид характеристики (см. здесь).
● Полнотекстовый поиск будет находить сразу конкретное значение объекта при поиске по значению какой-либо характеристики. Если же значения характеристик хранятся в регистре сведений, то поиск будет находить запись регистра сведений и только из этой записи можно будет получить доступ к нужному объекту.
Реализация
Схема, удовлетворяющая вышеописанным требованиям, выглядит следующим образом:
● План видов характеристик хранит список видов характеристик.
● В предопределенных данных специального объекта хранятся наборы характеристик – т. е. перечень характеристик, которые могут быть заданы объектам метаданных, для которых выбрана возможность указания характеристик. Список доступных характеристик задается в режиме «1С:Предприятие», а не в режиме Конфигуратор.
● В объекте, для которого имеется возможность указания характеристик, существует специальная табличная часть, которая хранит вид характеристики (из списка допустимых) и конкретное значение этой характеристики.

Рис. 165. Характеристики в табличной части – общая схема
Рассмотрим схему подробнее на примере характеристик для справочника Номенклатура. План видов характеристик аналогичен предыдущим примерам. Для хранения значений характеристик необходимо в справочнике Номенклатура завести табличную часть (например, с именем Характеристики). В данном случае табличная часть будет выступать аналогом регистра сведений, который использовался в предыдущих примерах для хранения значений характеристик. В табличной части необходимо создать два реквизита:
● ВидХарактеристики – ссылка на используемый план видов характеристик (тип ПланВидовХарактеристикСсылка. ХарактеристикиОбъектов). В этом реквизите будет находиться ссылка на характеристику.
● ЗначениеХарактеристики – значение характеристики (типа Характеристика.ХарактеристикиОбъектов). Хранит значение одного из типов, выбранных в качестве типа значения вида характеристики, указанной в реквизите ВидХарактеристики.

Рис. 166. Хранение характеристик и их значений в табличной части справочника
Настройка свойств реквизитов табличной части будет происходить аналогично настройкам измерений и ресурсов регистра, используемого для хранения значений характеристик.
Для реквизита ВидХарактеристики необходимо в свойство Связи параметров выбора (см. здесь) добавить параметр с именем ОбъектОтбораВидовХарактеристик, связанный с измерением Ссылка и с режимом использования Очищать. Такая настройка при выборе вида характеристики обеспечит отображение только тех характеристик, которые указаны в соответствующем предопределенном элементе справочника НаборыХарактеристик.

Рис. 167. Настройки реквизита справочника «ВидХарактеристики»
Для реквизита ЗначениеХарактеристики следует:
● В свойство Связи параметров выбора (см. здесь) добавить параметр с именем Отбор.Владелец, связанный с реквизитом Характеристики.ВидХарактеристики и с режимом использования Очищать. Такая настройка при редактировании в форме обеспечит очистку значения характеристики при смене вида характеристики.
● Свойство Связь по типу установить в значение Характеристики.ВидХарактеристики.
Организация хранения списка используемых характеристик для каждого объекта метаданных (равно как и специальная форма выбора плана видов характеристик) аналогично примеру, рассмотренному в примере 4.
Расширение
Если в описанный пример необходимо добавить поддержку характеристик для еще одного объекта метаданных, то следует выполнить следующие действия:
● В «новый» объект добавить табличную часть Характеристики по аналогии с примером из данного раздела (указав все необходимые свойства реквизитов).
● В справочнике НаборыХарактеристик создать новый предопределенный элемент.
● Для «нового» объекта метаданных следует настроить связь между объектом конфигурации и справочником НаборыХарактеристик (по аналогии с примером из данного раздела).
● В форме выбора плана видов характеристик необходимо добавить нужный тип в код заполнения соответствия Предопределенные. Например, для справочника Контрагенты добавляемая строчка будет выглядеть следующим образом (предопределенный элемент справочника НаборыХарактеристик будет называться Контрагенты):
Копировать в буфер обменаПредопределенные.Вставить(Тип("СправочникСсылка.Контрагенты"), Справочники.НаборыХарактеристик.Контрагенты);
Реализация данного примера позволит:
● Вести единый список видов характеристик для всех объектов метаданных, для которых нужно вести учет характеристик.
● Формировать, в режиме «1С:Предприятия», для каждого объекта метаданных списки допустимых видов характеристик.
● Применять ограничения доступа к данным, заданные для объектов данных, также и для ограничения доступа к значениям характеристик.
5.13.3. Субконто аналитического учета
План видов характеристик позволяет организовать аналитический учет на плане счетов бухгалтерского учета. Для этого следует указать, какой план видов характеристик содержит виды субконто бухгалтерского учета. Тогда для указания конкретного вида субконто будет выбираться значение из указанного плана видов характеристик. Для того чтобы задавать виды субконто на этапе разработки – в плане видов характеристик следует указать предопределенные значения, если виды субконто не задаются на этапе разработки, то предопределенные значения можно не указывать.

Рис. 168. Использование видов субконто
На рисунке видно, что счет 40 «Выпуск продукции (работ, услуг)» имеет два вида субконто – НоменклатурныеГруппы и ВидыСтоимости, которые выбираются из набора предопределенных видов характеристик, определенных в данном плане видов характеристик.
Более подробно про организацию аналитического учета см. здесь.
5.13.4. Использование характеристик в прикладном решении
5.13.4.1. Автоматически генерируемые формы
В том случае, если объекты метаданных, участвующие в работе с характеристиками, заданы с учетом всех рекомендаций (указанных выше), для просмотра и редактирования видов и значений характеристик не требуется создавать дополнительных форм (кроме примеров 4 и 5, где формы следует создавать вручную). Автоматически генерируемые формы будут обладать нужными возможностями:
● В форме объекта, в панели навигации, будет команда перехода к списку его характеристик;
● Отображение списка видов характеристик;
● Отображение списка значений характеристик;
● Редактирование значений характеристик (с автоматическим указанием необходимых отборов и связей редактируемых значений).
Примечание. Выбор в качестве объекта хранения табличной части справочника (документа и т. д.) не приведет к возможности автоматического формирования списка выбора при добавлении характеристик для конкретного объекта. Формирование такого списка следует выполнять программным способом. Пример такого формирования см. здесь.
5.13.4.2. Использование характеристик в отчетах
Характеристики можно использовать в отчетах для следующих целей:
● Отображение в отчете (выбранные поля),
● Использование в отборе,
● Использование для сортировки,
● Использование для группировки,
● Использование в условном оформлении.
Для того чтобы в отчете можно было использовать характеристики объекта метаданных, необходимо, чтобы в списке доступных полей схемы компоновки данных присутствовало поле с типом ссылки на этот объект метаданных и у этого поля не должен стоять запрет на использование реквизитов поля.

Рис. 169. Ограничение реквизитов поля
Рассмотрим простой отчет, в котором присутствует поле Товар, имеющее тип СправочникСсылка.Номенклатура. У элемента справочника Номенклатура существуют реквизиты и стандартные реквизиты.
Рис. 170. Реквизиты и стандартные реквизиты справочника «Номенклатура»
В режиме 1С:Предприятие для этого справочника было создано несколько видов характеристик.

Рис. 171. Виды характеристик для справочника «Номенклатура»
При возникновении необходимости использовать какие-либо характеристики (например, Жирность и Размер) в качестве поля отчета, в списке реквизитов поля отчета Товар будут представлены реквизиты, стандартные реквизиты и список видов характеристик, созданных для справочника Номенклатура.

Рис. 172. Указание характеристик в качестве полей отчета
Необходимо найти нужный вид характеристики в списке реквизитов (см. рис. 172) и добавить его в список выбранных полей.
Аналогичным образом характеристики используются в других компонентах системы компоновки данных (отбор, сортировка, группировка, условное оформление).
5.13.4.3. Использование характеристик в динамических списках
5.13.4.3.1. Общая информация
Характеристики можно использовать в динамических списках для следующих целей:
● Использование в отборе,
● Использование для сортировки,
● Использование для группировки,
● Использование в условном оформлении,
● Отображение в отдельной колонке списка.
При этом настройка отображения колонки в динамическом списке выполняется в диалоге настройки формы (Все действия – Изменить форму), а отбор, сортировка, группировка и условное оформление настраиваются в диалоге настройки списка (Все действия – Настроить список).
Следует помнить, что основным способом использования характеристик в динамических списках является использование «через точку» (т.е. в отборах, группировках и т. д.), однако в случае необходимости имеется возможность включать отображение характеристик и в основную таблицу динамического списка (подробнее см. здесь).
5.13.4.3.2. Использование в отборах и т. д.
Использование характеристик для настройки списка требует наличия в списке доступных полей динамического списка колонки ссылочного типа необходимого объекта метаданных.

Рис. 173. Настройка динамического списка
Для того чтобы использовать значение характеристики в настройке динамического списка (отборе, сортировке и т. д.), следует выполнить следующие действия (в режиме 1С:Предприятие):
● Открыть диалог настройки динамического списка;
● «Раскрыть» ссылочное поле (в списке доступных полей);
● Выбрать необходимую характеристику для использования в необходимой настройке.

Рис. 174. Использование характеристик
5.13.4.3.3. Включение в состав колонок
Для отображения характеристик в колонках динамического списка, необходимо в составе колонок списка обеспечить наличие колонки (возможно, невидимой) связанной с данными ссылочного типа необходимого объекта метаданных.

Рис. 175. Добавление колонки динамического списка
Для того чтобы добавить поле, отображающее значение какой-либо характеристики, следует выполнить следующие действия (в режиме 1С:Предприятие):
● Открыть диалог настройки формы;
● Встать курсором на скрытое поле ссылочного типа;
● Нажать кнопку Добавить поля;
● Выбрать необходимый вид характеристики.
Теперь добавленные виды характеристик будут отображаться колонками динамического списка.

Рис. 176. Добавление колонки с характеристиками
5.14. Регистры
5.14.1. Общая информация
Регистры «1С:Предприятия» предназначены для хранения и обработки различной информации, отражающей хозяйственную или организационную деятельность предприятия.
Объекты информационной базы типа Документ и Справочник предназначены для хранения информации об объектах предметной области, таких как сотрудники, товары, материалы, валюты. Соответственно, каждый объект базы данных отражает соответствующий объект предметной области.
В регистрах обычно хранится информация об изменении состояний объектов или другая информация, не отражающая непосредственно объекты предметной области. Например, в регистрах может храниться информация о курсах валют или информация о приходе и расходе товаров.
Объект базы данных существует независимо от значений его реквизитов и имеет самостоятельную ценность. Например, у сотрудника может поменяться фамилия, номер паспорта и любые другие реквизиты. При этом он будет оставаться тем же самым физическим лицом.
После удаления объект нельзя создать заново. Даже если завести все его реквизиты в соответствии с удаленным объектом, это будет уже другой объект. Для объекта система хранит внутренний идентификатор – ссылку. Ссылка уникальна в пределах всей информационной базы. Двух объектов с одинаковыми ссылками не может существовать на всем протяжении жизни информационной базы. Ссылки удаленных объектов не присваиваются вновь созданным объектам. Система предоставляет возможность хранить в полях базы данных ссылки на объекты базы данных.
Единицей хранения информации в регистрах является запись. Прикладная нагрузка записи регистра определяется исключительно хранящимися в ней данными. Например, сама запись о курсе валюты не представляет собой ничего существенного. Она не соответствует никакому объекту в предметной области. Существенным является только то, что в ней содержится валюта, дата и курс валюты, установленный на эту дату. Можно удалить эту запись и внести такую же – это не повлияет на логику работы системы. Соответственно, у записей регистров не существует ссылок, и в полях базы данных нельзя хранить ссылки на записи регистров.
В данной главе приведено описание регистров сведений и регистров накоплений. О регистрах бухгалтерии см. здесь, а о регистрах расчета см. здесь.
5.14.2. Регистры сведений
5.14.2.1. Общая информация о регистрах сведений
Основная задача регистра сведений – хранить существенную для прикладной задачи информацию, состав которой развернут по определенной комбинации значений и при необходимости развернут во времени. Например, если мы хотим хранить информацию о ценах конкурентов на продаваемые нами товары, то собранная информация о ценах разворачивается по товарам и конкурентам. А если мы хотим отслеживать динамику изменений цен и будем заносить их периодически, то хранимая информация разворачивается также и во времени.
В системе «1С:Предприятие» для хранения подобных данных и работы с ними используется специальный механизм – регистр сведений.
Регистр сведений фактически представляет собой в общем случае многомерный массив данных, необходимый для реализации функции, которая может выдать нужную информацию по определенному набору аргументов. Аргументы функции называются измерениями, а результат функции – ресурсами. В приведенном выше примере двумерный регистр ЦеныКонкурентов будет содержать измерения Конкурент и Товар и ресурс Цена. Ресурсов может быть больше чем один: например, можно хранить оптовую и розничную цены.
Помимо измерений и ресурсов для регистра сведений может быть создан набор реквизитов. Реквизиты позволяют включать в записи регистров различную дополнительную информацию. Реквизиты не влияют на значения ресурсов регистра и могут использоваться для анализа записей регистра.
Регистры сведений, информация в которых развернута во времени, называются периодическими. Для периодических регистров сведений система поддерживает такие стандартные операции, как получение наиболее позднего или наиболее раннего значения (например, получение последней введенной цены по конкретному товару и конкретному конкуренту), а также получение среза наиболее поздних или ранних значений. Например, могут быть получены все последние введенные цены по различным товарам и конкурентам.
Для разворота информации во времени используется поле Период регистра. Оно не вносится в качестве измерения, а добавляется системой автоматически при создании периодического регистра.
Для регистров сведений можно не создавать измерений. В этом случае регистр будет представлять набор периодических данных. Такие регистры могут использоваться, например, для хранения фамилий различных должностных лиц, чьи подписи располагаются в документах. В процессе ведения хозяйственной деятельности документы создаются и подписываются должностными лицами, имеющими право подписи в определенный момент времени. здесь показывалось, как использовать значения констант для подобных целей. Недостатком данного приема в случае смены значения константы является то, что при открытии архивного документа будет указана новая фамилия ответственного лица, выбранная из константы. В таких случаях нужно использовать не константу, а периодический регистр сведений, который хранит данные об изменениях, а в документах используется выбор значений из регистра сведений по дате документа.
Наиболее характерный пример одномерной периодической величины – курс валюты. При выполнении каких-либо расчетов (например, при определении рублевой цены пересчетом валютной цены по курсу) важно знать его величину на момент вычисления.
Особенно важно знать курс валюты при выполнении каких-либо расчетов задним числом – в этом случае необходимо «вспоминать» курс за уже прошедшие даты.
Чтобы иметь возможность получать подобные сведения, необходимо создать таблицу, графами в которой были бы, очевидно, наименование валюты, дата курса и сама величина курса. Строки такой таблицы содержат курс нескольких валют на конкретную дату.
|
Дата |
Валюта |
Курс |
|
31.10.2008 |
USD |
26,5430 |
|
31.10.2008 |
EUR |
35,0447 |
|
01.11.2008 |
USD |
27,0981 |
|
01.11.2008 |
EUR |
34,4092 |
|
02.11.2008 |
USD |
27,0793 |
|
02.11.2008 |
EUR |
34,4828 |
При обращении к подобной таблице следует иметь в виду, что в колонке Курс хранятся конкретные величины курса на определенную дату и подразумевается, что на все последующие даты, до новой величины курса, курс не меняется. Поэтому для получения курса на какую-то промежуточную дату следует брать величину курса на ближайшую предыдущую дату, на которую существует записанный курс.
Также следует понимать, что различные значения валют в колонке Валюта фактически означают, что ведется параллельная история курсов нескольких валют. Иначе говоря, приведенную выше таблицу можно отобразить по-другому.
|
Дата |
Курс USD |
Курс EUR |
|
31.10.2008 |
26,5430 |
35,0447 |
|
01.11.2008 |
27,0981 |
34,4092 |
|
02.11.2008 |
27,0793 |
34,4828 |
Подобных колонок курсов в таблице может быть столько, сколько курсов разных валют требуется хранить.
Если регистр непериодический, то поле Период для него не создается. В приведенном примере регистр ЦеныКонкурентов может быть непериодическим, если мы не хотим хранить историю изменения цен, а хотим иметь только актуальные цены. Тогда функция регистра сможет ответить на вопрос: «Какая сейчас цена у такого-то конкурента на такой-то товар», но не сможет ответить на вопрос: «Какая была цена у такого-то конкурента на такой-то товар в начале года».
Из описанных принципов работы регистра сведений вытекает то, что в системе может быть только одна запись с определенным набором и периодом измерений. Действительно, по одному товару одного конкурента может быть только одна цена. Если по какой-либо причине мы можем получить несколько цен и хотим занести эту информацию в базу данных, то нам нужно создать еще одно измерение для хранения того значения, по которому эти цены могут различаться. Например, можно завести измерение ИсточникИнформации. Тогда можно будет вводить цены конкурентов в разрезе источников.
Уникальность записей по набору измерений принципиально отличает регистры сведений от регистров накоплений, которые позволяют вводить несколько записей с одинаковым значением измерений и периодом.
Если при работе с регистром получение данных на самый первый или самый последний (текущий) моменты времени являются наиболее частыми вариантами использования, то для таких регистров имеет смысл разрешить системе поддерживать итоги для среза последних (свойство Разрешить итоги: срез последних) или среза первых (свойство Разрешить итоги: срез первых). В качестве примера такого использования можно привести регистр с отпускными ценами на товары. Цена товара может меняться с течением времени, но получение текущей цены является наиболее распространенным запросом к этому регистру.
Итоги регистра сведений будут использоваться в случае выполнения всех следующих условий:
● Для регистра разрешено использование итогов в конфигурации;
● Для регистра разрешено использование итогов в режиме «1С:Предприятие»;
● Получаются данные на самую первую дату (срез первых) или самую последнюю (текущую) дату (срез последних), без указания значения периода;
● Условия для виртуальных таблиц СрезПервых и СрезПоследних задаются только на значения измерений и разделителей, находящихся в режиме Независимо и совместно;
● В ограничениях доступа к данным используются только измерения и разделителей, находящихся в режиме Независимо и совместно.
Если все условия не выполняются, то для получения информации из регистра будет использоваться обычный запрос.
5.14.2.2. Записи регистра сведений
Строки регистра сведений, содержащие информацию о значениях ресурсов для определенных значений измерений и конкретного периода, называются записями. Для идентификации записи регистра сведений служит ключ записи. Записи в регистр сведений можно вносить двумя способами:
● вручную,
● документами.
Выбор режима внесения записей см. здесь.
Эти два варианта влияют на способ внесения информации, а не на основную логику работы регистра.
Документ, которым вносится запись в регистр сведений, называется регистратором.
Регистры, записываемые независимо, могут свободно редактироваться вручную или средствами встроенного языка. При этом если измерение такого регистра назначено как «ведущее» и значением измерения является ссылка на объект базы данных, то будет считаться, что запись регистра имеет смысл, только пока существует этот объект. Например, если назначить ведущим измерение Конкурент, то считается, что запись имеет смысл только как информация по данному конкуренту. Соответственно, при удалении данных конкурента записи по нему будут удалены автоматически.
Если регистр записывается регистратором, то это значит, что записи будут жестко подчинены регистраторам – документам. Обычно это значит, что записи будут порождаться при проведении документов. Соответственно, при удалении документа записи будут удаляться автоматически. В отличие от ведущих измерений, регистратор может быть только один.
Следует помнить, что ключ записи регистра сведений, созданный с помощью метода ПустойКлюч(), не равен ключу записи регистра сведений, значения измерений которого равны значениям по умолчанию для «своих» типов.
5.14.2.3. Редактирование регистра сведений
Для работы с регистрами сведений предназначена ветвь Регистры сведений дерева конфигурации.
При редактировании регистра определяются его свойства, разрабатывается структура регистра: создаются наборы измерений, ресурсов и реквизитов регистра, создаются экранные формы просмотра и редактирования записей регистра и, если необходимо, печатные формы регистра (см. здесь).
В этом разделе в дополнение к общим свойствам объектов конфигурации будут описаны уникальные свойства регистра сведений.
Регистр редактируется в окне редактирования Регистр сведений. Свойства регистра собраны на закладках.

Рис. 177. Редактор регистра сведений
Периодичность – это свойство позволяет указать, с какой периодичностью регистр должен сохранять значения ресурсов.
Это свойство напрямую влияет на возможность получения значений ресурсов регистра методами встроенного языка. Для непериодического регистра можно получить только последнее введенное значение ресурсов регистра – информация за предыдущие периоды в таком регистре отсутствует. Для периодических регистров нельзя получить значение с меньшей периодичностью, чем установленная периодичность регистра.
Периодичность не зависит от способа редактирования регистра.
Режим записи – свойство определяет, каким образом будут вноситься записи: независимо (например, вручную) или будут подчиняться регистратору (например, документами).
Если для регистра указано, что он периодический и выбран независимый режим записи, то становится доступным свойство Основной отбор по периоду. Если флажок установлен, то наряду с основными измерениями и реквизитами регистра, участвующими в отборе записей при регистрации изменений, можно указывать отбор по полю Период.
На закладке Данные формируется структура данных регистра. Создаются измерения и ресурсы, а также реквизиты.
На закладке Регистраторы производится управление списком регистраторов. Закладка доступна, если в свойстве Режим записи установлено Подчинение регистратору.

Рис. 178. Задание регистраторов регистра сведений
В верхнем списке производится управление списком регистраторов (устанавливаются или снимаются отметки), а в нижнем списке приводится список отмеченных объектов, являющихся регистраторами.
Аналогично описанному для регистров сведений механизму управления списком регистраторов производится управление списком регистраторов для других видов регистров.
Особенностью ресурсов регистров сведений является широкая типизация данных, в отличие от регистров других типов, где ресурсы могут быть только числовыми.
Описание приемов создания форм и макетов см. здесь.
5.14.2.4. Разработка структуры регистра сведений
Разработка структуры регистра заключается в создании наборов измерений, ресурсов и реквизитов.
Для управления списком измерений, ресурсов и реквизитов регистра и редактирования их свойств служат управляющие элементы групп Измерения, Ресурсы, Реквизиты окна редактирования Регистр. С точки зрения настройки элементы этих групп одинаковы. Описание порядка использования этих управляющих элементов см. здесь.
5.14.2.4.1. Свойства измерения (ресурса, реквизита) регистра сведений
Свойства измерений, ресурсов и реквизитов редактируются при помощи палитры свойств. В основном они совпадают с общими свойствами объектов конфигурации. Ниже в этом разделе будут описаны уникальные свойства измерений, ресурсов и реквизитов.
Ведущее – установка этого свойства имеет смысл для измерений, тип данных которых – ссылка на объект конфигурации. В этом случае считается, что запись регистра сведений имеет смысл, только пока существует этот объект. При удалении объекта записи по нему будут автоматически удалены из регистра.
Запрет пустых значений – установка этого флажка включает механизм запрета записи регистра с пустым значением измерения.
Индексировать – для измерений свойство доступно для редактирования, если измерение не является ведущим. Для измерений, ресурсов и реквизитов с установленным свойством Индексировать создается отдельный индекс, что увеличивает производительность при работе с регистром. Для ведущих измерений индекс создается всегда.
При просмотре регистра в режиме 1С:Предприятие существует возможность сортировать записи регистра по индексированным измерениям, ресурсам и реквизитам. Необходимое число форм для просмотра и редактирования регистра должно быть создано в процессе разработки конфигурации.
5.14.2.4.2. Упорядочивание списка измерений регистра сведений
Порядок расстановки измерений регистра сведений имеет важное значение. Измерения, к которым необходим быстрый доступ, следует располагать в начале списка измерений.
Последовательность расстановки измерений регистра сведений влияет на возможность применения методов встроенного языка, использующих позиционный доступ к измерениям.
Также необходимо иметь в виду, что изменение порядка измерений требует реструктуризации информационной базы.
5.14.3. Регистры накопления
Регистры в системе «1С:Предприятие» используются для накопления информации о наличии и движении каких-либо величин – материальных, денежных и других. Вся информация о хозяйственных операциях, которая вводится с использованием документов или формируется при помощи расчетов, должна быть накоплена в регистрах. Тогда эту информацию можно будет извлечь, проанализировать и представить пользователю в виде отчетных форм.
В этом разделе будет рассказано о понятии регистр накопления и даны сведения об основах использования.
5.14.3.1. Общая информация о регистрах накопления
Регистр накопления – это объект конфигурации, предназначенный для хранения движений регистра и итоговой информации.
Проблема, которая обычно возникает при создании «хранилища» сводной информации, состоит в определении его структуры: в каких разрезах следует накапливать сводные данные, чтобы затем можно было извлечь нужную информацию без утомительной обработки. Система «1С:Предприятие» использует простые и в то же время гибкие средства для создания регистров накопления: достаточно просто задать, в каких разрезах и какие данные требуется хранить в регистре, а система сама обеспечит запись и получение нужных данных простыми языковыми средствами.
Методы встроенного языка позволяют получить остатки регистра накопления на заданный момент времени. Есть возможность фильтрации по значениям измерений, а также получения остатков в разрезе других измерений.
Рассмотрим пример. Предположим, что в создаваемой программе торгово-складского учета требуется хранить сведения о количестве и стоимости каждого товара на каждом складе. В дальнейшем предполагается получать информацию такого типа: «остаток конкретного товара на конкретном складе», «остаток конкретного товара всего, на всех складах», «стоимость всех товаров на конкретном складе».
В идеологии системы «1С:Предприятие» регистр накопления такого вида представляет собой прямоугольную систему координат, на одной оси которой находятся склады, на другой – товары, а на пересечении конкретного склада и конкретного товара находятся цифры количества товара и стоимости товара.

Рис. 179. Регистр накопления
Физический смысл регистра накопления сформулировать довольно сложно, и, скорее всего, регистр накопления не имеет материального аналога.
ВНИМАНИЕ! Поэтому определим, что регистр накопления – это n-мерная система координат, в узлах которой хранятся совокупные данные. Оси такой системы координат будем называть измерениями регистра, а хранящиеся в узлах данные – ресурсами регистра.
5.14.3.2. Движения регистра накопления
Изменение состояния регистров накопления выполняется обычно при проведении документа. Процедура проведения документа расположена в модуле документа и содержит алгоритм формирования сведений об изменениях в регистрах, которые необходимо выполнить при проведении документа. Эти сведения называются движениями регистра. Механизм подсчета итогов использует движения регистров для выполнения непосредственных изменений в регистрах накопления. Таким образом, движения регистров содержат только приращения (со знаком плюс или минус) значений ресурсов регистра, а не итоговые величины значений.
Специалист, выполняющий конфигурирование системы, имеет возможность предоставить конечному пользователю средства просмотра движений регистров. Конфигуратор позволяет создавать экранные и печатные формы для просмотра и анализа движений регистров.
В процессе разработки конфигурации можно создать неограниченное количество регистров накопления. Однако следует учитывать, что запись изменений в большом числе регистров при проведении документа может вызывать уменьшение скорости работы системы в целом.
Помимо измерений и ресурсов для регистра накопления может быть создан набор реквизитов. Реквизиты позволяют включать в движения регистров различную дополнительную информацию. Реквизиты не влияют на значения ресурсов регистра и могут использоваться для анализа движений регистра.
5.14.3.3. Итоги регистра накопления
Как было написано выше, изменения в регистрах вносятся движениями регистра. Движения регистров оказывают влияние на его итоги. Итоги – это сводная информация регистров, которая получается путем суммирования значений, вносимых движениями регистров.
Итоги регистра накопления можно представить в виде таблицы с количеством колонок, равным сумме измерений и ресурсов регистра накопления. Количество строк в таблице итогов регистра накопления будет зависеть только от количества уникальных значений измерений, и не будет зависеть от количества уникальных значений ресурсов.
|
Товар |
Склад |
Количество |
Сумма |
|
Стол |
Розничный |
10 |
5 000 |
|
Стол |
Оптовый |
5 |
2 500 |
|
Шкаф |
Временный |
7 |
10 500 |
|
Шкаф |
Оптовый |
2 |
3 000 |
|
Шкаф |
Розничный |
10 |
15 000 |
Из таблицы видно, что измерение Товар принимает значения Стол, Шкаф, а измерение Склад – Временный, Оптовый и Розничный. В колонках Количество и Сумма, отражающих ресурсы регистра накопления, записано количество и сумма каждого товара на каждом складе.
В отличие от движений регистра, нет возможности непосредственно просматривать итоги регистра накопления. Для обращения к итогам в конфигурации может быть создано необходимое число отчетов, которые будут обращаться к итогам и выдавать их в виде товарных отчетов, складских карточек и ведомостей и т. д.
5.14.3.4. Регистры остатков и регистры оборотов
В системе «1С:Предприятие» возможно использование регистров накопления двух типов: регистры остатков и регистры оборотов.
Для регистра остатков методы встроенного языка позволяют получить остатки регистра накопления на заданный момент времени. Есть возможность фильтрации по значениям измерений, а также получения остатков в разрезе других измерений.
Регистры оборотов предназначены для хранения информации, для которой понятие остатка лишено смысла, например, сумм продаж в разрезе покупателей.
Рассмотрим в качестве примера отслеживание взаиморасчетов с покупателями товаров, которые производит или продает предприятие (потребителями услуг, оказываемых предприятием, и так далее). Можно утверждать, что ведение подобного учета – обязательная часть общего учета на любом предприятии.
Для того чтобы оперативно получать информацию о взаимной задолженности предприятия и покупателя, потребуется регистр Взаиморасчеты, в котором для каждого покупателя будет храниться сумма задолженности. При совершении хозяйственной операции состояние регистра будет соответствующим образом изменяться, каждый раз отражая текущее состояние взаиморасчетов. Регистр Взаиморасчеты – это регистр остатков.
Однако быстро получить информацию об объеме закупок, совершенных данным покупателем за какой-либо период времени, из регистра Взаиморасчеты нельзя – он такой информации не хранит. Поэтому придется приложить дополнительные усилия для ее получения: например, можно включить в структуру регистра реквизит Контрагент, а затем отобрать движения регистра по нужному контрагенту и вычислить общую сумму закупок. Но когда необходимо получать эти сведения оперативно (например, при достижении определенного объема закупок покупателю должна предоставляться скидка), такой способ, конечно же, не подходит.
В этом случае решением проблемы может быть использование регистра оборотов. В таком регистре – назовем его Объем закупок – для каждого покупателя будет храниться информация об объеме закупок (об обороте покупателя).
Теперь при совершении хозяйственных операций необходимо будет изменять не только состояние регистра Взаиморасчеты, но и регистр Объем закупок. В этот регистр при совершении клиентом каждой покупки будет заноситься информация о сумме покупки. В результате в регистре Объем закупок будет постоянно накапливаться информация об общем объеме закупок клиента.
Из всего сказанного выше можно сделать выводы о преимуществах использования регистров.
Прежде всего, регистры используются для хранения информации, к которой требуется получать оперативный доступ. «Уровень оперативности» и, соответственно, целесообразность использования регистра должен определять специалист, выполняющий конфигурирование системы «1С:Предприятие», в соответствии с требованиями пользователей системы.
Также можно сказать, что регистры позволяют получать наиболее достоверную информацию о состоянии средств. Так как процессы сохранения документа и записи изменений в регистрах разделены (допускается сохранение документа без его проведения), может возникать расхождение между данными документов и информацией в регистрах. Но регистр, в отличие от документа, является хранилищем итоговой информации, поэтому именно запись изменений в регистры служит подтверждением того, что хозяйственная операция совершена.
5.14.3.5. Основные свойства регистра накопления
Для работы с регистрами накопления предназначена ветвь Регистры накопления дерева конфигурации.
Редактирование свойств объектов типа Регистр накопления и создание подчиненных объектов выполняются в окне редактирования (см. здесь).
При редактировании регистра накопления определяется его вид, разрабатывается структура регистра:
● создаются наборы измерений, ресурсов и реквизитов регистра;
● если необходимо, создаются экранные и печатные формы просмотра движений регистра.
Примечание. В качестве типа измерения регистра накопления не могут выступать значения типа УникальныйИдентификатор, ДвоичныеДанные, строка неограниченной длины.
В этом разделе будут описаны уникальные свойства регистра накопления, в дополнение к общим свойствам объектов.
Вид регистра – если регистр предназначен:
● для хранения остатков (выберите из списка значение Остатки);
● хранения оборотов – значение Обороты.
Описание разницы между регистрами остатков и оборотов см. здесь.
Основная форма списка – для регистра может быть создано несколько форм для просмотра его движений. Если форм для ввода и выбора несколько, то в свойстве Основная форма списка можно указать форму, которая будет использоваться по умолчанию.
Разрешить разделение итогов – если флажок установлен в значение Истина (значение по умолчанию), то будет задействован механизм разделителя итогов, который обеспечивает более высокую параллельность работы при записи в регистр. При одновременной записи движений несколькими сеансами система не будет обновлять одни и те же записи итогов, а будет записывать изменения итогов отдельно. При получении итогов эти данные складываются. Таким образом, обеспечивается и поддержание в актуальном состоянии итогов (для быстрого получения отчетов, например), и параллельность записи движений. Этот режим требует дополнительных расходов ресурсов (например, увеличивается количество данных в итоговых таблицах). Поэтому свойства есть и в конфигурации, и в языке для управления этим режимом.
Записи будут «размножаться» только при параллельно выполняемых транзакциях. Их количество по каждой комбинации измерений будет зависеть от максимального количества одновременно выполняемых транзакций. При пересчете итогов накопленные отдельные записи сворачиваются.
Режим разделения итогов может быть изменен пользователем в режиме работы 1С:Предприятие. По умолчанию свойство включено.
Использование в итогах – если флажок установлен в значение Ложь, измерение исключается из хранимых итогов регистра.
Также для регистра может быть создано несколько форм для просмотра его движений. Если форм для ввода и выбора несколько, то в свойстве Основная форма списка можно указать форму, которая будет использоваться по умолчанию.
5.14.3.6. Агрегаты оборотных регистров накопления
Для повышения производительности системы в случае использования оборотных регистров накопления предназначен механизм агрегатов. Можно сказать, что агрегаты – это специализированные хранилища, предназначенные для использования в рамках механизмов запросов «1С:Предприятия».
5.14.3.6.1. Основные понятия
При дальнейшем рассмотрении работы с агрегатами будут использоваться некоторые термины, которые мы определим в этом разделе.
Агрегат – физическая таблица базы данных, хранящая сводные обороты всех ресурсов регистра по выбранным измерениям с выбранной периодичностью и за определенный период. В регистре, для которого формируются агрегаты, не может быть более 30 измерений.
Агрегат характеризуется следующими параметрами:
● Размер агрегата – это размер таблицы агрегата. Оценочный показатель.
● Эффект – ожидаемое уменьшение среднего времени выполнения запроса с использованием агрегатов. Например, если эффект агрегата равен 90 %, то это означает, что среднее время выполнения запроса с использованием агрегатов будет на 90 % меньше, чем среднее время выполнения того же запроса, но с использованием итогов. Оценочный показатель.
Период агрегата – интервал дат, данные за который помещены в агрегат.
Периодичность агрегата – периодичность, с которой в агрегате хранятся данные.
Список агрегатов – набор агрегатов, заданный на этапе конфигурирования. Список может быть сформирован либо вручную, либо загружен из файла, полученного в результате расчета оптимальных агрегатов.
Статистика использования – информация о том, какие запросы (измерения, период, периодичность) выполняются к регистру. Используется для перестроения агрегатов и получения оптимального списка агрегатов.
Оптимальный список агрегатов – список агрегатов, соотношение размера и эффекта которых является оптимальным для текущего состояния регистра (его движений и статистики использования).
Режим агрегатов/итогов – если установлен режим агрегатов, то при выполнении запросов будут использоваться данные агрегатов; если установлен режим итогов, то при выполнении запросов будут использоваться данные итогов.
Использование агрегатов – выключение использования агрегатов означает, что при изменении движений не будет выполняться никаких операций над агрегатами. Выключать использование агрегатов имеет смысл на время массированной загрузки данных в регистры, однако последующее включение использования агрегатов может привести к ресурсоемкому процессу актуализации агрегатов (если изменяемые данные находятся внутри периода агрегатов).
5.14.3.6.2. Общая схема работы с агрегатами
Приведем общую схему работы с агрегатами:

Рис. 180. Общая схема работы с агрегатами (клиент-серверный вариант)
Примечание. Данная схема описывает работу с одним регистром. Если необходимо работать с несколькими регистрами, то операцию, выполняемую на каждом шаге, следует выполнить для каждого регистра.
Более подробно распишем приведенную схему работы:
1. Нужно создать в конфигураторе необходимый список агрегатов. Данный шаг не является обязательным. Создание агрегатов в режиме конфигуратора может использоваться в том случае, если требуется обеспечить постоянное использование какого-либо агрегата в любой информационной базе.
Если агрегаты решено создавать в конфигураторе, то это можно сделать несколькими способами:
● Рассчитать (например, в режиме итогов) и загрузить оптимальные агрегаты (метод ОпределитьОптимальныеАгрегаты()). Если агрегаты ранее не использовались, то список оптимальных агрегатов будет получен только на основании таблицы движений регистра. Если агрегаты использовались, то список оптимальных агрегатов будет построен на основании таблицы движений и статистики использования.
● Создать собственный список агрегатов на основании анализа запросов к регистру.
2. После обновления конфигурации базы данных включить для регистра режим агрегатов (метод УстановитьРежимАгрегатов()).
3. Далее необходимо периодически выполнять перестроение агрегатов (метод ПерестроитьИспользованиеАгрегатов()). При выполнении этой операции система добавляет нужные агрегаты и удаляет неиспользуемые. Данная операция выполняется в том случае, если текущий список агрегатов не является оптимальным. Удаление производится только для тех агрегатов, которые создавались во время выполнения операции перестроения. Агрегаты, созданные в конфигураторе, автоматически не удаляются.
Если агрегаты созданы в конфигураторе, то при выполнении операции перестроения с ними будут выполняться следующие действия:
● Агрегат будет включен в том случае, если вариант использования агрегата установлен в значение Всегда. Оценка эффективности использования такого агрегата не влияет на его использование.
● Агрегат будет включен на основании оценки эффективности использования в том случае, если режим использования агрегата установлен в значение Авто. Использование данного агрегата оценивается наряду с агрегатами, которые система создает автоматически. Если автоматически создаваемый агрегат окажется эффективнее агрегата, созданного в конфигураторе с режимом использования Авто, то будет использоваться автоматически создаваемый агрегат.
4. Затем необходимо выполнить обновление агрегатов (метод ОбновитьАгрегаты()). Обновление агрегатов производит перенос данных из таблиц движений выбранного регистра в соответствующие таблицы агрегатов. Переносятся те движения, которые были созданы в таблице движений после предыдущего обновления агрегатов.
5. Далее следует накопить статистику использования созданных агрегатов. Для этого следует в течение некоторого интервала времени (например, 1 месяц) выполнять типовые задачи, в которых используются данные из регистра, для которого был включен режим агрегатов. В процессе работы необходимо регулярно выполнять обновление агрегатов. По истечению этого периода следует выполнить перестроение агрегатов (шаг 3) и регулярно повторять операции шагов 3 – 5.
Рассмотренная схема описывает подход к работе с агрегатами регистра в клиент-серверном варианте.
В файловом варианте использования системы, работа с агрегатами выглядит несколько по-иному:

Рис. 181. Общая схема работы с агрегатами (файловый вариант)
Основное отличие этой схемы от общей схемы работы с агрегатами (см. рис. 181) заключается в следующем (будут описаны только отличия):
● На шаге 1 список агрегатов в конфигураторе следует создавать обязательно.
● Шаг 6. Пересчет оптимальных агрегатов (метод ОпределитьОптимальныеАгрегаты()) следует выполнять с некоторой регулярностью (например, 1 месяц). Во время этого периода (1 месяц) следует выполнять типовые задачи, в которых используются данные из регистра, для которого был включен режим агрегатов. В процессе работы необходимо регулярно выполнять обновление агрегатов.
● Шаг 7. После получения нового списка оптимальных агрегатов, необходимо определить, требуется изменение списка агрегатов в метаданных конфигурации или нет. Если изменение не требуется, то следует продолжить работу, перейдя на шаг 3.
● Шаг 8. Если необходимо выполнить обновление списка агрегатов, то следует выполнить загрузку необходимых (или всех) агрегатов (из списка оптимальных). Затем нужно обновить конфигурацию базы данных (произойдет реструктуризация информационной базы) и потом продолжить работу с шага 3.
Рекомендации по выполнению каждого из рассмотренных шагов рассматриваются в следующем разделе.
5.14.3.6.3. Рекомендации по использованию агрегатов
Формирование списка агрегатов
Формирование списка агрегатов можно выполнять несколькими способами. Если агрегаты планируется включить для регистра, уже существующего в конфигурации, но для которого не было включено использование агрегатов, то это можно сделать следующими способами:
1. Если в регистре отсутствуют движения или движений мало (не более 2–3 тысяч записей), следует выполнить анализ запросов, которые используют выбранный регистр, и получить перечень часто используемых комбинаций измерений, отборов, периодов запросов и периодичности получения данных. На основании полученной информации создать список агрегатов, при этом постараться минимизировать количество используемых агрегатов.
2. Если в регистре присутствует существенное количество записей (более 3 тысяч), то можно выполнить расчет оптимальных агрегатов на основании данных регистра с помощью метода ОпределитьОптимальныеАгрегаты() и загрузить полученный список агрегатов.
Если для используемого регистра был включен режим агрегатов и включено использование агрегатов (т. е. каким-то образом сформирован первоначальный список агрегатов), то можно также получить список оптимальных агрегатов и загрузить его в конфигураторе. Отличие этого способа от способа номер 2 заключается в том, что в этом случае для расчета оптимальных агрегатов будет использоваться статистика, которую ведет система. Поэтому полученный список агрегатов будет более эффективен, нежели получение оптимальных агрегатов для регистра, у которого не был включен режим агрегатов и использование агрегатов.
Примечание. Использовать метод получения оптимальных агрегатов имеет смысл в том случае, если в таблице движений регистра находятся не менее 3–5 тысяч записей. На меньшем количестве записей построенный список агрегатов может оказаться неэффективным.
Выполнение перестроения
Операцию перестроения агрегатов следует выполнять не реже, чем операцию расчета списка оптимальных агрегатов. При этом данная операция не предполагает изменения списка агрегатов, а старается «обойтись» только существующими агрегатами.
Также следует помнить, что операция перестроения эффективна в том случае, если для ее работы накоплен достаточно большой объем статистических данных.
Однако рекомендации по периоду перестроения в общем случае дать затруднительно, но можно отметить основные факторы:
● есть вероятность изменения характера данных в регистре;
● есть подозрения на изменение характера запросов (что приведет к изменению накапливаемой статистики).
При выполнении операции следует указать два параметра:
● Максимальный относительный размер – задает ограничение на размер формируемого списка агрегатов (в процентах от таблицы движений). Если параметр равен 0, то ограничения на размер агрегатов не задаются.
● Минимальный эффект от перестроения – процент, на который необходимо увеличить эффект старого списка при перестроении. Если новый список увеличивает эффект на заданное значение, то метод реально перестраивает список. Если параметр не указан или равен 0, это означает отсутствие требований к минимальному эффекту.
Также происходит перестроение текущего списка агрегатов, если он больше, чем параметр Максимальный относительный размер, или удалось построить список с эффективностью большей как минимум на значение параметра Минимальный эффект. В противном случае список агрегатов не перестраивается.
Примечание. Операция перестроения является достаточно длительной и ресурсоемкой процедурой. Не рекомендуется выполнять ее во время интенсивной работы с информационной базой других пользователей.
Выполнение операции обновления агрегатов
Данную операцию рекомендуется выполнять чаще, чем выполняется операция перестроения агрегатов.
Обновление агрегатов может выполняться двумя способами:
● Полностью обновляются все агрегаты, отмеченные как используемые. Это может занимать существенное время.
● Так называемое «порционное» заполнение. В этом случае за одно обращение обновляется период, равный 1 месяцу в 10 агрегатах.
При выполнении операции следует указать параметр Максимальный относительный размер. Он задает ограничение на размер формируемого списка агрегатов (в процентах от таблицы движений). Если параметр равен 0, то ограничения на размер агрегатов не задаются.
Примечание. Желательно выполнять данную операцию в периоды минимальной нагрузки на информационную базу.
Совет. Рекомендуется использовать режим разделения итогов при использовании агрегатов, особенно если обновление агрегатов выполняется регламентным заданием на фоне интенсивного проведения документов, связанных с регистром, у которого выполняется обновление агрегатов.
Использование агрегатов
Для определения агрегата, который будет использоваться для запроса, будет использован алгоритм, который будет описан далее.
В запросе выделяются используемые измерения регистра, потом подбирается перечень агрегатов, которые содержат все используемые измерения, и наиболее полно соответствуют запросу по периодичности и периоду. Из этого списка выбирается агрегат, с минимальным размером. Именно этот агрегат и будет использоваться.
В запросе может использоваться агрегат, периодичность которого меньше периодичности, требуемой в запросе. В этом случае необходимые данные будут получены суммированием данных из меньших периодов.
Возможна ситуация, когда период, заданный в запросе, не совпадает с периодом агрегатов. В этом случае для исполнения запроса возможно использование двух агрегатов. Рассмотрим пример. В информационной базе существуют два агрегата, закрывающие весь период запроса:
● С периодичностью месяц;
● С периодичностью день.
Запрос исполняется за период с 15 сентября по 15 ноября. В этом случае будут использованы два агрегата:
● Агрегат с периодичностью месяц будет использован для получения данных за период с 1 октября по 31 октября;
● Агрегат с периодичностью день будет использован для получения данных за периоды с 15 сентября по 30 сентября и с 1 ноября по 15 ноября;
● Данные по разным агрегатам будут суммированы для получения окончательного результата.
Виртуальная таблица оборотов регистра, для которого включен режим агрегатов, всегда содержит актуальные данные.
Выполнение расчета оптимальных агрегатов
Данная операция может выполняться по необходимости, она не является регулярной. Ниже приведен перечень ситуаций, при наступлении которых рекомендуется выполнить расчет списка оптимальных агрегатов:
● по истечении некоторого времени после первичного формирования списка агрегатов;
● в случае существенного падения производительности при текущем списке агрегатов;
● при существенном изменении характера данных;
● при изменении состава запросов к регистру;
● если есть вероятность, что текущий список агрегатов перестал быть оптимальным.
Примечание 1. Для клиент-серверного варианта данная операция не является обязательной. Формирование оптимальных агрегатов (при необходимости) выполняется автоматически во время выполнения перестроения агрегатов.
Примечание 2. Данная операция является наиболее ресурсоемкой и продолжительной. Настоятельно рекомендуется выполнять ее только в тех случаях, когда с информационной базой не работают другие пользователи.
Использование регламентных заданий при работе с агрегатами
Операции перестроения и обновления агрегатов можно выполнять с помощью регламентных заданий. Необходимо соблюдать следующие рекомендации при составлении расписания выполнения регламентных заданий:
● для регламентного задания, выполняющего операции перестроения и обновления, рекомендуется заполнять свойство регламентного задания Ключ (см. здесь).
● рекомендуется задавать расписание регламентных заданий перестроения и обновления так, чтобы не возникла ситуация, когда операции обновления и перестроения будут выполняться в одно время.
Соблюдение рекомендаций приведет к предотвращению параллельного выполнения операций перестроения и обновления, что положительно скажется на производительности.
5.14.3.6.4. Редактирование агрегатов
Создание и редактирование списка агрегатов возможно только для оборотного регистра накопления (свойство Вид регистра имеет значение Обороты). Для вызова конструктора агрегатов следует использовать команду Открыть агрегаты контекстного меню соответствующего регистра.

Рис. 182. Вызов конструктора агрегатов
Затем откроется окно конструктора агрегатов, в котором можно управлять агрегатами оборотного регистра накопления. Агрегатами можно управлять вручную, а также можно загрузить (для этого предназначена специальная кнопка командной панели) заранее подготовленный список оптимальных агрегатов.

Рис. 183. Конструктор агрегатов
При создании агрегатов можно указать вариант использования. Если стоит Авто (по умолчанию), то система будет сама определять необходимость использования данного агрегата во время выполнения операции перестроения агрегатов. Если стоит Всегда, значит система будет использовать агрегат всегда.
Колонка Периодичность определяет минимальный период времени, за который агрегат будет хранить итоги по выбранным измерениям. Допускается иметь несколько агрегатов с одинаковым набором измерений, но с разной периодичностью. Не следует злоупотреблять количеством агрегатов. Большое количество агрегатов может привести к излишнему увеличению размера базы данных, но не приведет к повышению производительности работы запросов.
В правой части окна можно указать, какие измерения входят в редактируемый агрегат. Агрегат может включать произвольное количество измерений (но не более 30) и не включать их вовсе. В этом случае система хранит сводные обороты по регистру с заданной периодичностью.
Если существует xml-файл, содержащий список оптимальных агрегатов, то можно выполнить загрузку такого списка. Для этого стоит воспользоваться специальной командой конструктора агрегатов (см. рис.183) и выбрать там предварительно подготовленный файл.

Рис. 184. Загрузка списка оптимальных агрегатов
Система выполнит сравнение списка из файла и текущего списка агрегатов и цветом отметит те агрегаты, которые рекомендуется добавить в систему (из списка Оптимальные агрегаты), и агрегаты, которые рекомендуется удалить из системы (список Агрегаты). Предложенные рекомендации можно не выполнять или выполнять в ограниченном объеме.
5.14.3.7. Разработка структуры регистра накопления
Разработка структуры регистра заключается в создании наборов измерений, ресурсов и реквизитов на закладке Данные (см. здесь).
5.14.3.7.1. Свойства измерения (ресурса, реквизита) регистра накопления
Свойства измерений, ресурсов и реквизитов редактируются при помощи палитры свойств. В основном они совпадают с общими свойствами объектов. Ниже в этом разделе будут описаны уникальные свойства измерений, ресурсов и реквизитов.
Тип. В отличие от измерений и реквизитов, объекты вида Ресурс могут хранить только один тип данных – Число.
Запрет незаполненных значений – установка этого флажка для измерения включает механизм запрета записи движений регистра с пустым значением измерения.
Индексировать – данное свойство можно установить только для измерений. Установка свойства позволяет ускорить выполнение операций, обращающихся к данным регистра, например, если выбираются движения по конкретному значению данного измерения. К таким операциям относятся запросы с условием равенства данного измерения указанному значению, а также временный расчет и методы обхода движений объекта РегистрНакопления встроенного языка, использующие отбор по определенному значению измерения.
Использование в итогах – если свойство не установлено, измерения исключаются из хранимых итогов регистра (свойство используется только для измерений оборотного регистра). Если такое измерение используется в запросе или в условии виртуальной таблицы, то виртуальная таблица не будет использовать хранимые итоги, а будет рассчитывать данные только по таблице движений.
5.14.3.7.2. Упорядочивание списка измерений регистра накопления
Порядок расстановки измерений регистра накопления влияет на оптимизацию доступа к итогам регистра: измерения, к которым необходим быстрый доступ, следует располагать в начале списка измерений.


